perm filename E[E,ALS]1 blob
sn#104777 filedate 1974-05-31 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00227 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00019 00002 TITLE EX -- DISPLAY EDITOR FOR STANFORD↔SUBTTL FREDERICK H.G. WRIGHT II
C00021 00003 RIGHT HALF FLAGS
C00023 00004 CHARACTER TABLE FLAGS
C00026 00005 DD←←20000 RUNNING ON DATA DISK
C00027 00006 DEFINE GETCHR(X)
C00031 00007 BEG, BEGSYS, BEGACT, BEGRPT, BEGDBG
C00034 00008 BEGRPG
C00036 00009 BEG0, BEG1, BEG1A, BEG2, BEGBKP
C00039 00010 BEG3
C00042 00011 MAIN, FNF, FNF2
C00044 00012 CMDIN, CMDLUP, CMDEX, CMDX, CMDX2
C00046 00013 CMDED, CMDRD, CMDRD2, MINUS, PLUS, NUMS, INFIN, ALTSET
C00048 00014 CMDERR, ERR, POPJ1, EXTNUL, CPOPJ, CBTAB, ICHTAB, ILLRDO, ILLDIR, ILLMES, ILLMS2, ERRX, ILLBK
C00050 00015 INIT, INIT0, INIT1, INI1, IOBARF
C00053 00016 CMDSP
C00055 00017 XCMDS, XDISP, MCMDS, MDISP
C00057 00018 EXTEND, EXTEN1, EXTL0, EXTL, EXTL1, EXTL2, EXTL3
C00059 00019 EXTLK0, EXTLK, EXTAMB, EXTNUL, EXTNF, EXTAM2, EXTBUF, EXTBFE
C00061 00020 READON, ROSET, READWR, NORDWR, CANCEL, SNKOFF, SNKON, DPYALW, DPYSKI, NORDOW
C00063 00021 DDTGO, R, DRAW, DRAWX, PPSET, LINCNT
C00065 00022 GETOUT, GETOU1, FINISH, FINI1, FINI2, GORPG, QUIT, CLOSIT
C00067 00023 NEWPAG, NEWPG, NEWPG0, NEWPG1, REREAD, PGINIT, NODEL, PGERR, FINSRT
C00069 00024 UNWIND, WIND, WIND1, LT, GT, LTE, GTE, TOP, BOT, JMP, UPARR, DWNARR
C00071 00025 XMARK--The `M' commands.
C00074 00026 DELLIN, DELPOS
C00076 00027 DELLP, DELL2
C00078 00028 DELPM, DELPM1, DELPM2, DELPM3
C00080 00029 DELPAG, DELPG1, ADJPG, ADJPGL
C00082 00030 RCOMP, RCOMP1, RCOMP2, RCOMPX
C00083 00031 DELETE, DELET1, ADDPAG
C00085 00032 APPEND, APPLUZ
C00087 00033 APPEN2, PMTXT, PMPAG
C00089 00034 INSERT
C00090 00035 INSER1, INSER2, INSER3, INSER4, INSER5
C00091 00036 INSER8, DIRADD
C00093 00037 INSER6, INSER7, MARK
C00094 00038 CONTQ
C00096 00039 ATTACH, ATTCH1, ARGCHK, ARGCHN
C00098 00040 ATTDO, ATTDO0, ATTDO2, ATTDO1
C00100 00041 ATTREP, ATTEX
C00102 00042 ATTKIL, ATTKL, ATTSRC, GPAGL, GPAGL0, GPAGL1, GPAGL2, GPAGL3, ATTWRT
C00104 00043 ATTCOP, ATTCP1, ATTCP
C00105 00044 ATTCP0, ATTCPL, ATCMOR, ATTCP2, ATTCP3, GPAGL
C00107 00045 EDIT, EDIT1, LINED, LINL1, EDDSP, EDARG, EDARGX
C00109 00046 EDFULL, EDTAB, EDNUL, EDCR, AGAIN, EDRP1, EDRPT
C00111 00047 EDGL, EDGL1, EDGL2, EDGL2A
C00114 00048 EDGL3, EDGL4, REEDIT, EDTMOR, EDGDSP, EDTAB2, PTOUT, PTPNT
C00117 00049 EDCR2, EDACT, EDITIT, REPLIN, PUTBAK
C00120 00050 EDPUT, EDPLR
C00122 00051 EDPS, EDPL, EDPLUZ
C00123 00052 EDSNK, EDSNK2, EDSNK3, ESDSP, ESALT
C00124 00053 CRDSP, REGCR, REGCR1, REGCR2
C00125 00054 CONTCR, CNTCR2, METACR, REPRST, REPRS2
C00127 00055 LECR, DUBLCR, DUBCR2
C00129 00056 INSONA, INSONE, INSNUL, INSNLP
C00131 00057 LININS, LINSLP, LINS1, LINGLP, LIDSP, LINTAB
C00133 00058 LINCR1, LINCR, LICCR, LINALT, LINCOM
C00134 00059 LINSTO, LINST1
C00136 00060 SETWRT, SETWR2, SETWRX, BTAB, BUF, RBUF
C00137 00061 FRD, FRD0, FRD1, NOEXT, NOPRG, NOPPN, NOSWIT, SWITL
C00140 00062 SETDEV, GETNAM, GETNML, GETP, GETPL, DTYI1, DTYI, DTYI2
C00142 00063 DOSWIT, NTYI, NTYIL, NTYIM, EDFIL, EDFIL2, SRCFIL, DSTFIL
C00144 00064 RSCAN, RSCAN0, RSCAN1, RSCAN2, RSCAN3, RSCAN4, RSCN4B, RSCN4C, RSCN4A, RSCN0A
C00148 00065 RSCAN5, RSCAN6, RSCAN7, RSCAN8, SYSCCK, CRECHK
C00150 00066 RSTYI, TYI1, TYI2, TYI3, TYIX, TYI4
C00152 00067 TYI, TYIT, TYIU
C00153 00068 TMPRED, TMPRD1, TMPRD2, TMPRDX, RPGRD1, BKPRED
C00159 00069 TMPWRT, BKPWRT
C00162 00070 FILERR, FILTYP, FILSTR, PPNTYP, FILETB
C00164 00071 SIXTYO, SIXTYL, SIXTY2, SIXTYN, SIXTNL, SIXTNN, PNTYO, PNTYOL
C00165 00072 UUOH, UUODSP, UFCE, UTYPCH, UTYPC2, UTYPDE, UTYPOC
C00167 00073 UTYPR, UTYPR1, USORRY, UFATAL
C00168 00074 OPENI, OPNOI, IOPEN, SETI, SETRLD, OPNDEV, RELDEV, OPNLUZ
C00171 00075 RLD, RLD1, RLD2, RLDX, RLDLUZ, FIXEOF, ENTLUZ, ENTL2
C00174 00076 EXTCHK, EXTCH1, EXTCH2, EXTCH3, EXTCH4, EXTTAB
C00176 00077 OPENW, OPENO, SETO, FPAUSE, PAUSE, PAUS2
C00178 00078 CLOSO, WRBUF, WRBF1, WRBF2, ENTR, OBUF
C00179 00079 MORCOR, INTLUZ, INTDSP, PDLOV, PDLOV1, PDLOV2, PDLOV3, ISAV
C00182 00080 FSINI, FSINI1, MORCOR
C00185 00081 FSGET, FSLUP0, FSLUP, FSGRAB, FSXIT
C00186 00082 FSNEWT, FSNEWP, FSNEW
C00187 00083 FSUSED, FSTSML, FSNEXT, FSHRET, FSLLUZ
C00189 00084 FSLSCN, FSLSCL, FSLFR, FSLSHF, FSLSLP, FSLMOV, FSLDON
C00191 00085 FSHSCN, FSHSCL, FSHFR, FSHSHF, FSHSLP, FSHSR, FSHMOV
C00193 00086 FSBLT, POPTJ, FSBLT1
C00194 00087 FSBLT2, FSBLT3, FSHBLT, FSHBL2
C00195 00088 PNTREL, SHFTB, STDSH1, STDSHF, RELOC, RELOCL
C00196 00089 FSGIVE, FSGIV1, FSGIV2
C00197 00090 CORCHK, CRUNCH, CMPACT
C00199 00091 ENDSET, ENDFIX
C00200 00092 FSCHK, FCLUP1, FCLUP2, FCFR, FCDON
C00202 00093 FUCHK, MOVIT, MOVTX
C00203 00094 PURINI, PLCHK, PL2CHK, PLCHKL, PLSCN0, PLSCN, PLSCN1, PLSCN2, PLSCN3
C00205 00095 PURCHK, PURCH1, PURCH2, PURCH3, PURC3A
C00208 00096 PURCH4, PURCH5, PURCH6, PURCH7, PURCLC, TYPHW, PURCK, PLCHK1, PLCHK2, PURFLG
C00210 00097 SAVIT
C00212 00098 CHECK, CHECK1, CHECK2
C00213 00099 CHKDIR, CHKDPL
C00215 00100 CHKDR1, CHKD1A, CHKDR2, CDDSP, CHKDR3, CHKDR4, CHKD4A
C00217 00101 CHKLST, CHKFS, CHKFSL, CHKFS2, CHKPNT, CHKPN2
C00218 00102 CHKPAG, CHKPGP
C00219 00103 CHKPG1, CHKPG2, CPDSP, CHKPGT, CHKPTL
C00221 00104 CHKPG3, CHKPG4, CHKPG5, CHKPG6
C00222 00105 CHKATT, CHKNAT
C00223 00106 CTAB 0-37
C00225 00107 CTAB 40-77
C00227 00108 CTAB 100-137
C00229 00109 CTAB 140-177
C00231 00110 GETDIR
C00232 00111 DIRCL2, DIRCL, DIRCL1, GETDR1
C00234 00112 DIRLIN, DIRLUP, DIRDON
C00237 00113 LOSDIR, BADDIR, NODIR, DIRNUM, GDDSP, LSKP1, DIRSHF, DIREND
C00240 00114 COPFIL, COPFL1, COPDO, COPYX, COPDAT, COPLUP
C00242 00115 COPCOR, COPCHK, YESCHK, COPCMD
C00244 00116 FORMAT, FMTOK, FMTDSP
C00245 00117 NEWDIR, NEWDLP, SKPDSP, NEWDFF, OPUT, OSET, TMPDIR
C00246 00118 MAKDIR, MAKDR0, MAKDR1, MAKDOL, MDOL1
C00248 00119 MDIL1, MDIL1A, MDIL2, MDIL2A, MDCSRC, MDCSR1, MD1DSP
C00250 00120 MDIL1B, MAKDLF, MAKDFF, MDFF2, MDFF3, MDCEOL, MD2DSP
C00252 00121 MD1CR, MD2CR, MD3CR, MD3CR1, MDIL3, MDCRCK, MDFIX
C00254 00122 CREATE, CREAT2, CTEXT
C00256 00123 RDPAGE, RDPGOK, RDSPAG, RDPAG0
C00258 00124 RDPAG2, RDPAG1, RDLINE, RDLLP, RDLTAB
C00260 00125 RDLCR, RDLLF, NUMSTR
C00262 00126 RDLFF, RDLDON, LINSET, RPDSP, RDLNUL
C00264 00127 RDPGLZ, SOSTST, SOSCHK, SOSCK2, PGMK, PGMK2
C00265 00128 DIRCHK, DIRNEW, DIRNW2, DIRNW1, TXTSHF
C00267 00129 FNDLIN, FNDPAG, FNDLN1, FNDLN2, FNDLN3
C00268 00130 REMPTR, FIXPTR, FNDPT1, FNDPT2, LPTRTB, DPTRTB
C00269 00131 DIRGET, DIRGL, DGEND, DRGSET
C00271 00132 NUM5, NUM5A, DIRHED, DIRTXT, DIREMK, DGDSP
C00273 00133 OUTDIR, OUTDOK, OUTDLP, ODDSP, ODDON, ODEXP
C00275 00134 INSDIR, DCLP1, DCLP2, DCNG, INSDL
C00277 00135 IDDSP0, IDDSP, IDTAB, INSD3, INSD4, SCOMS, SCOMS2
C00279 00136 IDNUL, IDDON, IDDONS
C00281 00137 DIRSET, DIRST1, DIRUP, DIRUP1, DIRUP2, DIRUP3
C00282 00138 DIRFIX, DIRFX1, DIRFX2, DIRFX3, DIRFX4, DIRFXN
C00284 00139 DISPLAY DATA STORAGE
C00285 00140 MORE DISPLAY STORAGE
C00286 00141 HEADERS & TRAILERS
C00287 00142 DPYINI, DPYCHK
C00289 00143 DPYI2, NODPY, WIPE, IWIPE
C00291 00144 SETSCR, NMVARR, MOVARR, SETARR
C00293 00145 ARRBOT, ARRTOP, SETWIN, WINCHK, WINCH2
C00295 00146 DISP, DISP0, DISP1, DISP2
C00297 00147 DISP3, DISP4, DISP5, DUMMY, EXCLR, EXSET,EXTST
C00299 00148 DISPAT, DISPAX
C00300 00149 DWNWIN, REWIN, DDISPX, DDSPX2, DDDONE, WIPIT, WIPL, WIPL2
C00302 00150 DDCOP, DDLUZ, LINREL, LINRLL, IDISP, IDISP2
C00303 00151 IIIARR, IIIAR2, IIIAR3
C00305 00152 LESET, LEADJ, LECLR
C00306 00153 DBLT, DBLT1, DBLT2, DBLT3, IDISPX, DISPX, PPBAJ1, POPBAJ, POPAJ
C00308 00154 PCOMPD, PCOMPI, PCOMPS, P2CMPD, P2CMPI
C00309 00155 DDISP, DDISP2
C00310 00156 DOARR, DOAR2, OFFARR, ONARR
C00311 00157 DDISPS, DDSPS2, DDSPS3, DDSPSX, DDSPS4
C00313 00158 DSPSAT, DSPSAX
C00314 00159 DBLTS, DBLTS2, DBLTSN, DBLTS3, DBLTS1, DBLTSA, DBLTA, DBLTA2
C00316 00160 TDISP, TDISP1, TDISP2, TDSP2A, TDISPX
C00318 00161 TDISPC, TDISP3, TDISP4, TDISP5, TYPE, TYPEL
C00319 00162 WRPAGE, WRPAG1, WRPAG2, WRBOOK
C00321 00163 WRPX0, WRPX, WRPX1, WRPX1A, WRPX1B, WRPX2
C00322 00164 WRPX3, WRPX4
C00323 00165 WRPOK, WRTIT, WRT0
C00324 00166 WRP1, WRLINE, WRLUP, WRLP2, WRRDO, WRRDO2, WRRDO3
C00326 00167 WRDSP, WRTAB, WRCHK, WRDONE, WRDON2
C00328 00168 WRPM, BTAB2
C00330 00169 FLSPAG, FLSPGL, FLSPG2, CLRWRT, CLRWR2
C00331 00170 TV, RSYS, RUN, RUN1
C00334 00171 RUNILL, RUNNON, RUNFNF, RUNDEV, RUNFIL
C00335 00172 SEARCH ROUTINES
C00336 00173 SREAD, SREAD1, SREAD2, SREAD3, SREAD4, SRSTOR, SRSTR2
C00338 00174 SRACT, SREAD5, SRALT, SRALT2, SRALUZ, SREDT
C00340 00175 FINDIT, FOUND, FNDMOV, FNDERR
C00342 00176 FIND
C00344 00177 DIRSRC, DFERR, SRCDF, SDFCR
C00346 00178 SSET, SSET2
C00347 00179 SCOMP, SCOMPX, SCOMPR
C00349 00180 SBARF, SBARF1, SARRGH, SFSGT, SFSGET, SFSPUT, SFSPTL
C00351 00181 SPARSE
C00352 00182 SPARS1, SPARS2, SPDSP, SSCAN, SSCANA, SSCANX
C00354 00183 SSCAN1, SSCN1A, SSCN1B, SSCQT, SSCBIN, SSCINF, SSCNOT, SSCUOP, SSCVB
C00356 00184 SSCLP, SSCDSP
C00358 00185 SGRAPH, SGRPH1, SGRPH2, SGRPHX, SGDO1, SGDO1X, SGDOX2, SGDSP, SGDO1B
C00360 00186 SGNOT
C00361 00187 SBACK, SBACK1, SBACK2, SBACK3, SBACK4
C00363 00188 SBBRCH, SBBR2
C00364 00189 SBCALC, SBCAL0, SBCAL1, SBCAL2, SBCAL3
C00365 00190 SBCAL4, SBCNON, SBCX, SBCOPL, SBCOP2, SBCEND, SBCEN2, SBCFIX, SBCFXL, SBCFXE, POPJ2
C00367 00191 SBCOK, SBCEN1, SBCLUZ, SBCLZ1, SBCNXT, SBCBP, SBCBPL
C00369 00192 SBCCB, SBCCB1, SBCCB2, SBCCB8, SBCCB3, SBCCB4, SBCCB5
C00371 00193 SBCCB6, SBCCB7, BITCNT, BITCN1
C00372 00194 NEWBIT, NEWBT0, NEWBT1, NEWBT2, NEWBT3, NEWBT4, NEWBT5
C00374 00195 NEWBTC, NEWBC1, NEWBC2, NEWBC3, NEWBNC, NEWBN1, NEWBN2, NEWBN3, NEWBCZ, NEWBNZ
C00376 00196 SCCOM, SCCNOT
C00377 00197 SCCBIT
C00378 00198 MAKBIT, MAKBT0, MAKBT1, MAKBTN, MAKBN2, MAKBTB, MAKBB3
C00380 00199 MAKBNB, MAKBBT, MAKBB2, MBDSP, MBIND, MBIND2
C00382 00200 SCGEN
C00384 00201 SCGEN1, SCGEN2, SCGEN3, SCGEN4, SCGEN5, SCGEN6
C00386 00202 SCGTST, SCGT2, SCGT3, SCGDSP, SCGCN, SCGCN2, SCGBTN, SCGBT
C00388 00203 SCGE, SCGE2, SCGEL, SCGBAK, SCGBK1, SCGBK2, SCGBK3, SCGFA, SCGNC, SCGNFA
C00390 00204 SCGHB, SCGHB0, SCGHB5, SCGHB1, SCGHB2, SCGHB3, SCGHB4, SCGHBX, SCGHX2
C00392 00205 SCGCB, SCGCB0, SCGCB1, SCGCB2, SCGCB3, SCGCB4, SCGCB5, SCGHCB
C00394 00206 SBTMAK, SBTMK1, SBTMK2, SBTMK3, SBTMK4, SCGENB, SCGHB, SSVINS, SCXCT, SBKNW, SBKNWA, SBKDSP
C00396 00207 SRCPAG, SRCPG1
C00398 00208 GBYTP, GBYTPL, GBTPX, GBPDSP, GBPTAB
C00399 00209 SRCPGF, SPFTAB, SPFCR, SPFLUZ
C00401 00210 SRCPGB, SPFTAB, SBKNL, SBKNUL
C00402 00211 SRCSET, SRCST1, SRCSTL, SRCST2
C00403 00212 SCALL, SRCHX, SRCHLX
C00404 00213 SCNBAK, SCNBKL
C00406 00214 SCONTF, SRCFNP, SRCFNB, SFNB2, SFRETR
C00408 00215 SRCFF, SFFNUL, SGTACS, SRTACS
C00409 00216 SRCFB, SFBNUL, SBKNB, SBKNB2, SIOERR, SBKNP
C00410 00217 JFILL, JUST, JUSTL1, JUSTL2, JDISP
C00412 00218 JUSTTB, JUSTSP, JUSTS2, JUSTSL, JUSTS3, JUSTSO, JSTSO2
C00413 00219 JUSTCR, JCRTB, JCR2, JFIX, JPTAB, JATAB
C00414 00220 NXTLIN, NXTLN2, JTAB, NXTBL
C00416 00221 JDUMP, JDMP2, JDLT, JDL1, JDISP2
C00418 00222 JDSP1, JDSP2, JDSP3, JDTAB, JFLUSH
C00420 00223 JDFIN
C00422 00224 JDFIN2, JSET, JSET2
C00423 00225 MACRO FREE STORAGE - MFSCLR,GETMFS,FREMFS
C00425 00226 MACRO DEFINER INPUT WATCHERS - INCHWL,INCHSL,SNEAKW,INCHRS,etc.: MACTYI
C00426 00227 PDL, PATCH, PAT, ZVARS, LEGTAB
C00428 ENDMK
C⊗;
TITLE EX -- DISPLAY EDITOR FOR STANFORD↔SUBTTL FREDERICK H.G. WRIGHT II
COMMENT ⊗ TO PUT UP A NEW E WITH AN UPPER SEGMENT, USE THE COMMANDS:
.ALIAS S,FW
.LOA @EE
.S 137 ;WRITE PROTECTS UPPER AND SETS ITS PROTECTION CONSTANT
.SSAVE SYS E ;BE SURE TO SSave (to keep the UPPER SEGMENT around)
end of comment ⊗
NOLIT
F←0
A←1
B←2
C←3
D←4
E←5
G←6
H←7
I←10
DSP←11 ;DISPATCH PNTR FOR CTAB
Q←14
T←15
TT←16
P←17
IFNDEF PURESW<PURESW←←0>
IFNDEF DEBSW<DEBSW←←1>
IFNDEF BOOKMD<BOOKMD←←1>
;BOOKMD NON-ZERO PERMITS /B MODE FOR READING BOOKS. 0 DISABLES /B MODE.
COPNUM←←3 ;LOG OF # K OF CORE FOR TEMP COPY BUFFER
SRSIZ←←40 ;SIZE OF SEARCH STRING BUFFER
LPDL←←69
DPYBSZ←←=660*2
DSKI←←1
DSKO←←2
SWP←←3
IFN BOOKMD, {
RPGO←←4 ;CHANNEL USED TO WRITE OUT .BKP FILE IN BKPSW MODE
};END BOOKMD
...←←0
;RIGHT HALF FLAGS
REDNLY←←1 ;READ ONLY MODE
COPY←←2 ;NEED TO DO COPY (← OR →)
DIROK←←4 ;HAVE COMPLETE DIR
UPDTXT←←10 ;LINE 1 CHANGED - UPDATE DIR AT WRPAGE
WRITE←←20 ;SOMETHING CHANGED - NEED TO WRITE IT
EOF←←40 ;INPUT EOF DETECTED - DO ANOTHER LOOKUP (LOSING SYSTEM!)
EDDIR←←100 ;EDITING THE DIRECTORY PAGE
ARG←←200 ;ARG WAS TYPED TO COMMAND
DSPSCR←←400 ;REDISPLAY SCREEN
DSPALL←←1000 ;REDISPLAY WHOLE SCREEN
FILLUZ←←2000 ;EDITING NONSTANDARD FORMAT FILE
REL←←4000 ;RELATIVE ARG (+ OR -)
NEG←←10000 ;NEGATIVE ARG
EDITM←←20000 ;DISPATCH IS FROM LINE EDIT
EDBRK←←40000 ;(WITH EDITM) COMMAND TYPED IN MIDDLE OF LINE
XPAGE←←100000 ;WILL EXPAND FILE FOR PAGE
UPDIR←←200000 ;NON-TEXT CHANGE TO DIR
ATTMOD←←400000 ;IN ATTACH MODE
;LEFT HALF FLAGS
ENTRD←←1 ;EDIT FILE HAS BEEN ENTERED
CLRBF←←2 ;CLEAR OBUF AFTER OUTPUT
NOSHUF←←4 ;DON'T SHUFFLE FREE STORAGE
NOCHK←←10 ;DON'T TRY TO CORE DOWN
OFFEND←←20 ;ARROW ON LINE N+1
NULLIN←←40 ;CURRENT LINE IS EMPTY
ARRPG←←100 ;ARROW POG IS SELECTED
TF1←←200 ;TEMP FLAG
PMLIN←←400 ;CURRENT LINE IS PAGE MARK
OKF←←1000 ;SHOULD TYPE "OK"
;CHARACTER TABLE FLAGS
NSPEC←←400000 ;STANDARD SPECIAL CHAR (NULL OR RUBOUT) - MUST BE SIGN
FSPC←200000 ;FILE NAME DELIMITER
LSPC←←100000 ;SPECIAL CHAR IN LINE
NUMF←←40000 ;DIGIT
DSPC←←20000 ;SPECIAL DIR CHAR
LETF←←10000 ;LETTER - WITH LT2F => LOWER CASE
LT2F←←4000 ;ALONE => $%._
SSP1←←2000 ;TYPE 1 SPECIAL SEARCH STRING CHAR
SSP2←←1000 ; " 2 " ...
EDOK←←40 ;RIGHTMOST OF 4 BITS (SHIFT BY CONTROL BITS) FOR LINE EDITOR LEGALITY
;COMMAND DISPATCH FLAGS
NOEDIT←←200000 ;DISPATCH DIRECTLY FROM LINE EDIT WITHOUT REPLACING LINE
DOEDIT←←100000 ;REPLACE LINE BEFORE DISPATCHING FROM LINE EDIT
;IF NEITHER OF THE ABOVE, RE-EDIT LINE AT SAME CURSOR POS (CHAR IS NO-OP)
NOATT←←40000 ;ILLEGAL IN ATTACH MODE
NORDO←←20000 ;ILLEGAL IF READ-ONLY
;10000 ;USER MODE BIT MUST BE UNUSED
SACMD←←4000 ;USES SEARCH ARG
SSCMD←←2000 ;SPECIAL ACTION WHEN ENTERED FROM SEARCH
LPDESC←←3 ;# EXTRA WDS DIR ENTRY
DPBIT←←400000 ;DIRPT ENTRY
D1BIT←←200000 ;DIRP1 ENTRY
RPMASK←←77 ;MASK FOR RELATIVE PAGE # FIELD
RPBYTE←←<220600,,> ;BYTE PNTR FOR ABOVE
LLDESC←←3 ;# EXTRA WDS TEXT LINE
PMARK←←400000 ;THIS LINE IS A PAGE MARK
ARRBIT←←200000 ;LINE IS ARRLIN
WINBIT←←100000 ;LINE IS WINLIN
LOKBIT←←200000 ;LOCKS DOWN FS BLOCK (CAN'T BE SHUFFLED)
MAXLIN←←=42
ATTMAX←←8
DD←←20000 ;RUNNING ON DATA DISK
III←←400000 ;" " III (BITS FROM GETLIN)
SUPCCR←←2 ;BREAK TABLE BIT TO SUPPRESS CTRL1-CR HACK
DVDSK←←200000 ;DISK BIT FROM DEVCHR
MININT←←23 ;LOWEST INT BIT #
ADRSIZ←←17 ;# BITS NEEDED TO ADDRESS PERMANENT CODE
ZZ←←.
LOC 137
IFN PURESW,<
JRST [ MOVNI 1
SETUWP
JRST 4,137
MOVSI 155000
SETPRO
JRST 4,137
CALLI 12]
>
IFG DEBSW-PURESW,<
JRST [ JSP E,PURINI
CALLI 12]
>
ORG ZZ
FOR @! FOO IN(SORRY,FATAL)
{DEFINE FOO(X)
{ FOO!U [ASCIZ /X/]}
}
DEFINE GETCHR(X)
{ILDB C,INPNT
SKIPGE X,CTAB(C)
XCT @CTAB(C)}
DEFINE GETCH1(X)
{ILDB C,INPNT
TDNE X,CTAB(C)
XCT @CTAB(C)}
DEFINE GETCH2(X,Y)
{ ILDB C,Y
TDNE X,CTAB(C)
XCT @CTAB(C)}
DEFINE FSFIX(X,Y)
{ HRRI Y,(X)
SUB Y,FSEND
LEG MOVEM Y,@FSEND
LEG HRRZM Y,-1(X)
HRRZM X,FSEND}
IFN DEBSW{DEFINE TSTSHF
{ SKIPE SHFMOD
PUSHJ P,MOVIT}}
IFE DEBSW{DEFINE TSTSHF{}}
DEFINE CW(C1,D1,C2,D2,C3,D3){BYTE(8)D1,D2,D3(3)C1,C2,C3,4}
;THESE MACROS MAKE A LINKED LIST AROUND AND THROUGH
;PURE AND UNPURE PARTS FOR CHECKSUMING THE PURE PARTS
;AN ERROR WILL RESULT IF THE SAME MACRO IS CALLED
;TWICE WITHOUT CALLING THE OTHER MACRO.
%SEG←←0
IFE PURESW{
DEFINE PURE{IFN %SEG{!} %SEG←←1 PURBEG←←.}
DEFINE IMPURE{IFE %SEG{!} %SEG←←0
PURBEG,,PURLK2↔PURLK2←←.-1
PURBEG,,PURLNK↔PURLNK←←.-1}
PURLNK←←PURLK2←←0}
;THESE MACROS SET RELOCATION TO THE PROPER SEGMENT FOR PURE OR UNPURE CODE
;AN ERROR MESSAGE WILL RESULT IF THE SAME MACRO IS CALLED TWICE WITHOUT
;CALLING THE OTHER MACRO.
IFN PURESW{
TWOSEG
RELOC 400000
RELOC
DEFINE PURE{IFN %SEG{!} %SEG←←1 RELOC}
DEFINE IMPURE{IFE %SEG{!} %SEG←←0 RELOC}}
;THIS MACRO SHOULD PRECEDE A LINE OF CODE WHICH CAN
;GENERATE A LEGAL ILL MEM REF.
LEGNUM←←0
DEFINE LEG{FOR @! X←LEGNUM,LEGNUM{LEG!X←←.} LEGNUM←←LEGNUM+1
}
FEFINE UUOS{FOR @! X IN(TYPCHR,TYPDEC,TYPOCT,SORRYU,FATALU,XTTYUU,SNEAKW,SNEAKS)}
ZZ←←0
UUOS{ZZ←←ZZ+1
OPDEF X[ZZ⊗33]
}
DEFINE XOPDEF(X,AC){OPDEF X[XTTYUU AC,]}
FOR X ⊂ ({INCHRW,0},{INCHRS,2},{INCHWL,4},{INCHSL,5})
{XOPDEF ( X ) ↔ }
NUUOS←←ZZ+1
EXTERN JOBREL,JOBFF,JOBAPR,JOBTPC,JOBDDT,JOBREN,JOBDDT,JOBOPC,JOBCNI
PURE
;BEG, BEGSYS, BEGACT, BEGRPT, BEGDBG
IFN DEBSW,<JRST BEGDBG>
JRST BEGRPT
BEG: JRST BEG0 ;RUN OR ET COMMAND
JRST BEGRPG ;RPG START. AC'S CONTAIN PARAMS
MOVEM 16,EPDL ;SYSTEM AXXCOM START
MOVEM 17,EPDL2 ;17[SIXBIT COMMAND, 16[ASCII DELIM
JSP P,INIT ;INITIALIZE
MOVE T,EPDL2 ;GET COMMAND NAME
MOVEM T,SYSCMD ;STOW IT
MOVE A,[440700,,BUF] ;INITIAL BYTE POINTER
MOVE C,EPDL ;INITIAL CHARACTER IN "SCAN"
; PUSHJ P,TYIT
; JRST BEGACT
; SETACT [BRKTAB,,BRKTAB] ;APPARENT NO OP -- RPH
INWAIT
HRLOI T,377777 ;SET T INFINITE
PUSHJ P,RSCN4A ;SCAN REMAINER OF COMMAND FOR ARGS
BEGSYS: LDB C,[301400,,SYSCMD] ;GET 2 CHARACTERS OF COMMAND NAME
PUSHJ P,SYSCCK ;DO WE KNOW THEM
JRST BEG1 ;YES. NOW WE READ FILE NAME FROM TTY
JRST BEG0 ;DONT UNDERSTAND COMMAND. RESCAN.
BEGACT: MOVE T,[440700,,[ASCIZ /
/]]
MOVEM T,TYIPNT
JRST BEGSYS
BEGRPT: JSP P,INIT ;INITIALIZE
PUSHJ P,TMPRED ;TRY TO READ TMPCORE FILE
JRST BEG0A
PUSH P,TYIPNT ;SAVE POINTER TO ARGS
MOVEM G,TYIPNT ;POINT TO COMMAND
PUSHJ P,GETNAM ;AND READ IT
MOVEM A,SYSCMD
POP P,TYIPNT ;NOW POINT TO ARGS AGAIN
JRST BEGSYS ;AND LOOK LIKE AXXCOM STARTUP
IFN DEBSW,<
BEGDBG: JSP P,INIT ;HERE FOR DEBUGGING. INITIALIZE
INWAIT ;WAIT FOR SOMETHING TO BE TYPED
HRLOI T,377777 ;SET CHARACTER COUNT TO INFINITE
PUSHJ P,RSCAN0 ;READ COMMAND, AVOID RESCAN
JRST BEG0A ;ACT NORMAL
>
;BEGRPG
;HERE AT RPG STARTUP.
BEGRPG: MOVEM 17,RPGACS+17
MOVEI 17,RPGACS
BLT 17,RPGACS+16 ;SAVE RPG PARAMETERS
JSP P,INIT0 ;INITIALIZE
HRRZ T,RPGLIN
CAILE T,=999
SETZB T,RPGLIN
MOVEM T,SLINE ;STARTING LINE NUMBER
SKIPGE T,RPGPAG
MOVEI T,
MOVEM T,SPAGE ;STARTING PAGE NUMBER
MOVSI T,'DSK'
MOVEM T,EDFIL-1 ;DEFAULT DEVICE
SKIPN T,RPGFIL
JRST GETOU1 ;NO FILE NAME - NO EDIT. EXIT
MOVEM T,EDFIL ;SAVE EDIT FILE NAME
SKIPN T,RPGPPN
MOVE T,PPN
MOVEM T,EDFIL+3 ;EDIT FILE PPN
MOVE T,RPGEXT
HLLZM T,EDFIL+1 ;EDIT FILE EXT
SETZM EDFIL+2
SETZM EDFIL+4
HRLOI TT,1
TRNE T,100000 ;INSPECT MODE FLAGS
MOVEM TT,EDFIL+4 ;SET /N NO DIRECTORY
TRNE T,400000
SETOM CREASW ;CREATING
TRNE T,200000
SETOM RDONLY ;/R READONLY
JRST BEG3
IMPURE
RPGACS: BLOCK 11 ;PLACE TO SAVE RPG PARAMETERS
RPGPPN: 0
0
RPGEXT: 0
RPGFIL: 0
RPGLIN: 0
RPGPAG: 0
0
PURE
;BEG0, BEG1, BEG1A, BEG2, BEGBKP
BEG0: JSP P,INIT ;INITIALIZE
PUSHJ P,RSCAN ;RESCAN TTY
BEG0A: SKIPN TYIPNT ;WAS THERE ANYTHING THERE?
OUTSTR [ASCIZ /FILE?/] ;NO. ASK FOR SOME.
BEG1: MOVEI D,EDFIL ;POINTER TO DEPOSIT?
LDB C,[301400,,SYSCMD] ;GET THE COMMAND NAME
PUSHJ P,CRECHK ;WAS IT CREATE?
JRST [SETOM CREASW ;YES. SET FLAG
JRST BEGSY2]
IFN BOOKMD, {
CAIN C,'RE' ;"READ" COMMAND?
JRST BEGBKP ;YES
};END BOOKMD
JUMPN C,BEGSY1 ;WAS IT SOME SORT OF COMMAND AT ALL?
BEGSY2: PUSHJ P,FRD ;READ FILE NAME (TTY OR RESCANNED DATA)
JRST FNERR ;OOPS.
BEGSY3: SKIPN EDFIL
JRST GETOU1
HLLM D,SRCFIL
HLLM D,DSTFIL
IFN BOOKMD, {
SKIPN BKPSW ;"READ" COMMAND USED?
JRST BEGSY4 ;NO
PUSH P,C
PUSHJ P,BKPRED ;LOOK FOR <FILENM>.BKP FILE (LIKE RPG FILE)
POP P,C
SETOM BOOKSW ;BKPSW IMPLIES BOOKSW
SETOM RDONLY ;BOOKSW IMPLIES RDONLY
JRST BEG1A
BEGSY4:
};END BOOKMD
TLNN D,740 ;ANY FILENAME, EXTENSION, OR PPN SPECIFIED?
JRST BEG1B ;NO
MOVEI G,(C)
PUSHJ P,TMPWRT
LDB C,[301400,,SYSCMD]
PUSHJ P,CRECHK
SETOM CREASW
MOVEI C,(G)
BEG1B: CAIE C,"←"
CAIN C,"→"
TROA F,COPY
JRST BEG1A
MOVEM C,TRMCHR#
MOVEI D,EDFIL2
PUSHJ P,FRD
JRST FNERR
MOVE G,[,SRCFIL-EDFIL2(A)]
CAIN C,"→"
HRRI G,DSTFIL-EDFIL2
MOVE A,[-5,,EDFIL2]
HRRZM A,@G
AOBJN A,.-1
HLLM D,EDFIL2(G)
SKIPN @SRCFIL
SETOM CREASW
BEG1A: PUSHJ P,TYIT
JRST BEG3
BEG2: PUSHJ P,TYI
JRST BEG3
JRST BEG2
FLOSE: SUB P,[1,,1]
FNERR: OUTSTR [ASCIZ /ILLEGAL FILE SPECIFICATION./]
JRST FNF1
IFN BOOKMD, {
BEGBKP: SETOM BKPSW# ;BKPSW MEANS WE WERE STARTED BY "READ" CMD TO USE .BKP FILE
SETOM BOOKSW# ;BOOKSW MEANS WE ARE IN /B MODE--NO FILE MODIFYING ALLOWED
};END BOOKMD
BEGSY1: MOVE H,TYIPNT
SKIPN TCPNT
PUSHJ P,TMPRED
JRST BEGSY2
PUSHJ P,FRD
JFCL
MOVEM H,TYIPNT
HRLI D,200000
PUSHJ P,FRD0
JRST FNERR
JRST BEGSY3
;BEG3
BEG3: PUSHJ P,SNKON
PUSHJ P,DPYSKI
SKIPE CREASW
PUSHJ P,CREATE
BEG4: MOVEI D,@SRCFIL
MOVEI A,1
PUSHJ P,OPENI
JRST FNF
MOVE T,@SRCFIL+4
AOS SRCFIL+4
MOVEM T,@SRCFIL+4
SKIPN DIR
PUSHJ P,GETDIR
MOVE T,EDFIL+4
TRNN F,COPY
IOR T,@SRCFIL+4
ADDI T,1
HRRZM T,DIRPAG#
PUSHJ P,COPFIL
MOVEI D,EDFIL
MOVEI A,1
PUSHJ P,OPNOI
PUSHJ P,OPNLUZ
TRZE F,UPDTXT
PUSHJ P,OUTDIR ;GETDIR ASKING FOR WRITE
MOVE A,[ASCID / /]
MOVEM A,HEDNAM
HRRZM A,HEDNAM+1
MOVE A,[HEDNAM+1,,HEDNAM+2]
BLT A,ROFLG-1
MOVE A,[260700,,HEDNAM]
MOVEM A,TYOPNT
MOVEI D,EDFIL
PUSHJ P,FILSTR
MOVEI A,<BYTE(7),,,"/","R"(1)1>
SKIPE RDONLY
TROA F,REDNLY
MOVEI A,1
IFN BOOKMD, {
SKIPE BOOKSW
MOVEI A,<BYTE(7),,,"/","B"(1)1>
};END BOOKMD
MOVEM A,ROFLG
MOVE A,[HEDNAM,,HED2NM]
BLT A,ROFLG2
MOVE T,PAGES
CAIE T,2
MOVEI T,1
SKIPGE A,SPAGE ;FIRST PAGE TO LOOK AT
MOVEI A,-1(T) ;NONE - ASSUME DIR
ADD A,DIRPAG
JUMPG A,.+2
MOVEI A,1
PUSHJ P,RDPAGE
JFCL
TRNE F,REDNLY!DIROK
JRST .+3
TRO F,COPY
JRST BEG4
SETZM TYIPNT
PUSHJ P,DPYINI
PUSHJ P,PGINIT
PUSHJ P,TMPWRT
IFN BOOKMD, {
SKIPGE A,NEWBKP
OUTSTR [ASCIZ /WILL CREATE .BKP FILE
/]
};END BOOKMD
HLRZ A,RPGLIN
TRNE A,376000
JRST MAIN
TRZN A,400000
JUMPG A,[MOVEM A,EDMOV↔MOVE D,CMDSP-1↔MOVEI A,↔JRST MAIN2]
PUSHJ P,ATTACH
JFCL
;MAIN, FNF, FNF2
MAIN:
IFN DEBSW,<
SKIPE CHKMOD
PUSHJ P,CHECK
SKIPE CHKMOD
JRST MAIN1
PUSHJ P,FSCHK
JFCL
SKIPN SHFMOD
JRST MAIN1
SKIPGE SAVMOD
PUSHJ P,SAVIT
PUSHJ P,MOVIT
PUSHJ P,FSCHK
JFCL
MAIN1:>
TDZ F,[TF1,,EDITM!EDBRK]
TLZE F,OKF
OUTSTR[ASCIZ/OK
/]
MOVEI DSP,CMDSP
PUSHJ P,CMDIN
JFCL
MAIN2:
IFN DEBSW,<
MOVEM D,LSTCOM#
MOVEM A,LSTARG#
>
PUSHJ P,(D)
TLO F,OKF
JRST 2,@[MAIN]
JRST MAIN2
FNF: PUSHJ P,EXTCHK
JRST BEG4
MOVEI D,LKUP
PUSHJ P,FILERR
FNF1: TRZA F,COPY
FNF2: JSP P,INIT1
OUTSTR [ASCIZ/
TRY AGAIN: /]
CLRBFI
SKIPN TYIPNT
JRST BEG1
SETZB T,TYIPNT
SKIPE TT,TCPNT
PTLOAD T
SKIPE TT,RSPNT
PTLOAD T
JRST BEG1
;CMDIN, CMDLUP, CMDEX, CMDX, CMDX2
CMDIN: TRZ F,ARG!REL!NEG
SETZB A,C
EXCH C,COMCHR#
JUMPN C,CMDEX ;Do we have a saved chr. ?
CMDLUP: PUSHJ P,CMDRD ;No. Read a new one.
CMDEX: LDB B,[70200,,C] ;Get its ctrl bits.
TRZ C,¬177
MOVSI E,EDOK
LSH E,(B)
TDNE E,CTAB(C) ;Is it a line editor command ?
JUMPGE DSP,CMDED ;Yes.
CMDEDR: TLZE C,1
INCHRW T ;We SNEAKed this chr, so now gobble it.
SKIPA D,@CTAB(C);Get dispatch tbl. entry.
XCMDX: MOVEI E,
CMDX: TLNE D,37 ;Is this a 2-level dispatch ?
MOVE D,@D ;Yes. Get final disp. addr.
TDNE E,D
JRST CMDERR
JUMPL D,(D) ;Dispatch immediately on some commands.
TRNN F,ARG
MOVEI A,1 ;If no repeat argument typed, assume 1.
CAILE A,=500
MOVEI A,=500
TRNE F,NEG
MOVN A,A
TLNN D,NORDO ;(?) Does this command change the file ?
JRST CMDX2 ;No.
TRNE F,EDDIR
JRST ILLDIR
IFN 0, { ;NOW, IN /B MODE, WE ARE ALSO IN /R MODE
SKIPE BOOKSW
JRST ILLBK
};END BOOKMD
TRNE F,REDNLY
JRST ILLRDO
CMDX2: TLNE D,NOATT
TRNN F,ATTMOD
JRST POPJ1
ILLATT: JSP A,ILLMES
ASCIZ /IN ATTACH MODE/
;CMDED, CMDRD, CMDRD2, MINUS, PLUS, NUMS, INFIN, ALTSET
CMDED: SKIPN DPY ;We have a command to be passed to the line editor.
JRST CMDEDR ;Has to be a dpy, or no line editor.
TLNE C,1 ;Now get fake dispatch tbl. pointer.
SKIPA D,-2(DSP)
MOVE D,-1(DSP)
JRST CMDX
CMDRD: PUSHJ P,DISP ;Update display, if needed.
XCT CHRTST ;Arg. to DISP
TDNE F,SNKTST
TRNE F,ARG
JRST CMDRD2
SNEAKW C,
CAIE C,15
TLOA C,1
CMDRD2: INCHRW C
CAIE C,15
POPJ P,
INCHRW C
XORI C,15≠12
POPJ P,
MINUS: TRC F,NEG
PLUS: TRO F,REL
JRST CMDLUP
NUMS: TRO F,ARG
IMULI A,12
ADDI A,-"0"(C)
JRST CMDLUP
INFIN: TRO F,ARG
MOVEI A,-1
JRST CMDLUP
ALTSET: MOVEI D,CPOPJ
POPJ P,
;CMDERR, ERR, POPJ1, EXTNUL, CPOPJ, CBTAB, ICHTAB, ILLRDO, ILLDIR, ILLMES, ILLMS2, ERRX, ILLBK
CMDERR: JSP D,ERRX
ERR: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR [ASCIZ /UNRECOGNIZED CONTROL CHARACTER -- /]
TRNE B,1
OUTSTR [ASCIZ /<ctrl>/]
TRNE B,2
OUTSTR [ASCIZ /<meta>/]
MOVEI B,(C)
ROT B,-7
CAIG C,15
CAIGE C,11
TROA B,B
HRRI B,@ICHTAB-11(C)
CAIN C,40
HRRI B,[ASCIZ /<space>/]
CAIN C,177
HRRI B,[ASCIZ /<bs>/]
CMDER2: OUTSTR (B)
OUTSTR [ASCIZ /
/]
POPJ1: AOS (P)
CPOPJ: POPJ P,
ICHTAB: FOR X IN (tab,lf,vt,ff,cr){[ASCIZ /<X>/]
}
ILLRDO:
IFN BOOKMD, {
SKIPE BOOKSW
JRST ILLBK
};END BOOKMD
JSP A,ILLMES
ASCIZ \IN /R MODE\
ILLDIR: JSP A,ILLMES
ASCIZ /ON DIRECTORY PAGE/
IFN BOOKMD, {
ILLBK: JSP A,ILLMES
ASCIZ \IN /B MODE\
};END BOOKMD
ILLMES: JSP D,ERRX
ILLMS2: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR [ASCIZ /ILLEGAL /]
OUTSTR (A)
OUTSTR [ASCIZ /.
/]
JRST POPJ1
ERRX: TLZE C,1
INCHRW T
POPJ P,
;INIT, INIT0, INIT1, INI1, IOBARF
INIT: SETZM RPGACS
MOVE [RPGACS,,RPGACS+1]
BLT RPGACS+17 ;CLEAR ACS FROM ALL BUT RPG STARTUP
INIT0: SETZM TYIPNT
SETZM TCPNT
SETZM MDEFPT
SETZM MXCTPT
SETZM SYSCMD
INIT1: MOVEM P,PDL ;SAVE RETURN ADDRESS WHERE WE CAN POPJ
MOVEI
MOVEI 17,1
BLT 17,17 ;CLEAR REAL AC'S
MOVE P,[-LPDL+1,,PDL] ;SET UP STACK (RETURN HAS BEEN PUSHED)
RESET ;CLEAN UP SYSTEM ASPECTS OF JOBS
MOVE A,[ZVARS,,ZVARS+1]
BLT A,EVARS
SETOM MARKS
MOVE A,[MARKS,,MARKS+1]
BLT A,MARKS+NMARKS-1 ;Init. the marks array.
PUSHJ P,MFSCLR ;Init. macro free stg.
MOVE T,[PUSHJ P,UUOH] ;OUR UUO HANDLER
MOVEM T,41
MOVEI T,220000 ;ENABLE FOR PDLOV AND MPV
APRENB T,
MOVEI T,TSINT ;ADDRESS OF INTERRUPT HANDLER
MOVEM T,JOBAPR
DSKTIM T, ;FIND OUT THE TIME AND DATE
MOVEM T,DATBLK#
MOVEI T, ;AND USER'S REAL NAME
GETPPN T,
MOVEM T,RPPN#
MOVEI T, ;AND USER'S ALIAS
DSKPPN T,
MOVEM T,PPN#
SETOM FIRPAG
SETZM DIR
;SETUP TABLE VBBITS TO HAVE A BIT ON FOR EACH CHARACTER WHICH DOESN'T HAVE
;ONE OF THE FOLLOWING BITS ON: LETF, LT2F, NUMF
;TABLE IS THE LEFTMOST 32 BITS OF 4 WORDS
MOVSI A,LETF!LT2F!NUMF
MOVEI B,40
MOVEI C,176
MOVEI E,VBBITS+4-1
INI1: TDNN A,CTAB(C)
IORM B,1(E)
JUMPL B,[MOVEI B,20↔SOJA E,.+2]
LSH B,1
SOJG C,INI1
MOVE T,FABITS+1
ANDM T,VBBITS+1
PUSHJ P,BITCNT
HRLZM T,VBBITS
MOVE T,[[LETF!LT2F!NUMF,,]-BEG+400000,,CTAB]
MOVEM T,5(E)
MOVE A,[-5,,EDFIL]
HRRZM A,SRCFIL-EDFIL(A)
HRRZM A,DSTFIL-EDFIL(A)
AOBJN A,.-2
IFG DEBSW-PURESW,{
SKIPN PURFLG
JSP E,PURINI
}
JRST FSINI ;GO INITIALIZE FREE STORAGE
;CMDSP
;MAIN COMMAND DISPATCH - INDEXED INTO VIA CTAB
DEFINE CC !(A){%!A←←.-CMDSP} ;TAGS FOR CTAB (PHASE 0 WOULD DO IF :: WORKED)
NOATT+EDOK*16,,EDSNK
NOATT+EDOK*10,,EDIT
CMDSP: SETZ CMDERR
SSCMD,,NMVAR1
,CRDSP(B)
SETZ CMDERR
SETZ CMDERR
FORMF
400000!NOEDIT,,ALTSET
SETZ CMDERR
SETZ CMDERR
SETZ NUMS
REPEAT 6,<SETZ CMDERR>
SETZ CMDERR
SETZ INFIN
SETZ CMDERR
CC(P) SSCMD,,NEWPAG
CC(M) XMARK
CC(E) GETOUT
CC(W) WIND
CC(L) UNWIND
CC(PLS) SETZ PLUS
CC(MIN) SETZ MINUS
CC(LT) LT
CC(GT) GT
CC(LE) LTE
CC(GE) GTE
CC(T) TOP
CC(B) BOT
CC(J) JMP
CC(X) SETZ EXTEND
CC(D) SACMD!NOEDIT+NOATT,,DELLIN
CC(DA) DOEDIT+NOATT,,DWNARR
CC(UA) DOEDIT+NOATT,,UPARR
CC(U) SSCMD!DOEDIT,,NMVAR1
CC(V) NOEDIT!DOEDIT,,DRAW
CC(.) NOEDIT!DOEDIT,,WRPAGE
CC(Q) NOATT,,CONTQ
CC(A) SACMD!SSCMD,,ATTACH
CC(C) SACMD!SSCMD,,ATTCOP
CC(K) ATTKIL
CC(R) ATTREP
CC(F) DOEDIT,,FINDIT
CC(I) NOEDIT!NOATT,,DUBLCR
;XCMDS, XDISP, MCMDS, MDISP
BEGIN XDISPS ;TO FLUSH MACROS
GLOBAL D ;GRRRR
;EXTEND MODE COMMAND TABLE (MUST BE ALPHABETICAL)
DEFINE XCMD{FOR X IN (<APPEND,NOATT>,CANCEL,<CLOSE,,CLOSIT>,<DDTGO,NOEDIT!DOEDIT>
,<DELETE,NOATT!NORDO>,DPYALWAYS,DPYSKIP,<DRAW,NOEDIT!DOEDIT>,FIND,<GORPG,NOATT>
,<INSERT,↑INSCMD::NOATT!NORDO>,<JFILL,SACMD>,<JUST,SACMD>
,LINCNT,<MARK,NOATT!NORDO>,PPSET,QUIT,READONLY,READWRITE,<RSYS,DOEDIT>,<RUN,DOEDIT>
,SNKOFF,SNKON,TV,TYPE)}
DEFINE MCMD{FOR X IN (READONLY,READWRITE)}
DEFINE CMDM(A,B,C){<SIXBIT /A/>
}
DEFINE DISPM(A,B,C){B,,IFIDN {C}{}{A;}C
}
FOR @! Y IN (X,M)
{ ,Y!DISP-Y!CMDS(D)
↑Y!CMDS:Y!CMD
{ CMDM X
}↑N!Y!CMDS←←.-Y!CMDS
↑Y!DISP:Y!CMD
{ DISPM X
}IFN .-Y!DISP-N!Y!CMDS{!}
}
BEND XDISPS
;EXTEND, EXTEN1, EXTL0, EXTL, EXTL1, EXTL2, EXTL3
EXTEND: MOVE E,[-NXCMDS,,XCMDS]
EXTEN1: OUTSTR [ASCIZ/COMMAND?
/]
PUSHJ P,DISP
XCT LINTST
MOVE D,[440600,,TT]
MOVEI TT,
MOVE G,[440600,,XMSK]
SETZM XMSK#
MOVEI T,77
MOVE Q,[440700,,EXTBUF]
EXTL0: PUSHJ P,TYIU
JRST EXTNUL
TLNN T,LETF!NUMF!LT2F
JRST EXTL0
JRST EXTL1
EXTL: PUSHJ P,TYIU
JRST EXTLK0
EXTL1: CAME Q,[100700,,EXTBFE-1] ;DON'T CAUSE CLOBBERAGE IF HE'S VERBOSE
IDPB C,Q
TLNN T,LETF!NUMF!LT2F
JRST EXTL2
TLNN D,770000
JRST EXTL ;IGNORE AFTER 6
SUBI C,40
IDPB C,D
IDPB T,G ;GENERATE MASK
JRST EXTL
EXTL2: MOVEM Q,EXTPNT#
EXTL3: PUSHJ P,TYI
JRST EXTLK
CAME Q,[100700,,EXTBFE-1]
IDPB C,Q
JRST EXTL3
;EXTLK0, EXTLK, EXTAMB, EXTNUL, EXTNF, EXTAM2, EXTBUF, EXTBFE
EXTLK0: MOVEM Q,EXTPNT
EXTLK: MOVEI T,
IDPB T,Q ;TERMINATOR FOR OUTSTR
CAIN C,175
JRST EXTNUL
MOVE D,E
CAMLE TT,(D) ;FIND FIRST COMMAND ≥ HIS
AOBJN D,.-1
JUMPGE D,EXTNF ;NONE
MOVE T,XMSK
AND T,(D)
CAME T,TT
JRST EXTNF ;DOESN'T MATCH - HE LOSES
MOVE T,XMSK
AND T,1(D)
CAMN T,TT
JRST EXTAMB ;NEXT ONE WORKS ALSO - NOT UNIQUE
MOVE D,@-1(E)
JRST XCMDX
EXTAMB: MOVEI D,EXTAM2
POPJ P,
EXTNF: JSP D,CPOPJ
EXTNF2: SKIPA T,[[ASCIZ/UNKNOWN COMMAND -- /]]
EXTAM2: MOVEI T,[ASCIZ/AMBIGUOUS COMMAND -- /]
OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR (T)
MOVEI T,
IDPB T,EXTPNT
OUTSTR EXTBUF ;WHATEVER HE TYPED
OUTSTR [ASCIZ/
/]
JRST POPJ1
EXTNUL: JSP D,CPOPJ
ANDI C,177
CAIN C,15
POPJ P,
OUTSTR [ASCIZ /ABORTED
/]
JRST POPJ1
IMPURE
EXTBUF: BLOCK 30
EXTBFE←←.
PURE
;READON, ROSET, READWR, NORDWR, CANCEL, SNKOFF, SNKON, DPYALW, DPYSKI, NORDOW
READON:
IFN BOOKMD, {
SKIPE BOOKSW
JRST NORDOW ;CANT CHANGE TO READONLY FROM /B MODE
};END BOOKMD
TRNE F,REDNLY
POPJ P,
PUSHJ P,WRPAGE
PUSHJ P,CLOSIT
SETOM RDONLY
MOVEI T,<BYTE(7),,,"/","R"(1)1>
TRO F,REDNLY
ROSET: MOVEM T,ROFLG
MOVEM T,ROFLG2
MOVE T,SCRTOP
HLLZS DPYTAB(T)
TRO F,DSPSCR
POPJ P,
READWR:
IFN BOOKMD, {
SKIPE BOOKSW
JRST NORDOW ;CANT CHANGE TO READWRITE FROM /B MODE
};END BOOKMD
TRNE F,FILLUZ
JRST NORDWR
SETZM RDONLY
MOVEI T,1
TRZE F,REDNLY
JRST ROSET
POPJ P,
IFN BOOKMD, {
NORDOW: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR [ASCIZ \CANNOT CHANGE FROM /B MODE.
\]
JRST POPJ1
};END BOOKMD
NORDWR: SORRY FILE NOT FORMATTED
JRST POPJ1
CANCEL: MOVE A,ARRL
MOVEM A,SLINE
PUSHJ P,FLSPAG
PUSH P,TOPWIN
MOVE A,FIRPAG
PUSHJ P,REREAD
POP P,A
JRST SETWIN
SNKOFF: TDZA T,T ;NO SNEAK AT BEGINNING OF LINE
SNKON: MOVSI T,NULLIN ;SNEAK AT BEGINNING OF LINE
MOVEM T,SNKTST#
POPJ P,
DPYALW: SKIPA T,[¬<JFCL>] ;ALWAYS UPDATE DISPLAY
DPYSKI: HRLOI T,<(¬<INSKIP>)> ;ONLY UPDATE DISPLAY IF NO INPUT READY
SETCAM T,CHRTST#
MOVNM T,LINTST#
POPJ P,
;DDTGO, R, DRAW, DRAWX, PPSET, LINCNT
DDTGO: SKIPN TT,JOBDDT
JRST EXTNF2
TRNN TT,400000
JRST .+3
UNPURE
FATAL COULDN'T UNPURIFY UPPER
LDB T,[331100,,1(TT)]
CAIN T,<PUSHJ>⊗-33
JRST DDTG2 ;DDT - LOSE
HRRZ TT,-3(TT)
MOVE T,MASK
MOVEM T,1(TT)
MOVE T,[441100,,[BYTE (9)"E",200+":","2","4",200+"I"]]
MOVEM T,-1(TT)
DDTG2: PUSHJ P,WIPE
PPSEL
PGACT
SETZM JOBOPC
PUSHJ P,@JOBDDT ↔R←←CPOPJ
DDTRET: DPYOUT 17,[[0]↔0]
PGSEL
TLZ F,ARRPG
IFG DEBSW-PURESW,{PUSHJ P,PURCLC}
PUSHJ P,PPSET
SETZM BLNKL
JRST DRAWX
DRAW: PUSHJ P,DPYCHK
PUSHJ P,PPSET
PUSHJ P,WIPE
DRAWX: TRO F,DSPALL
SETOM LEPOS
POPJ P,
PPSET: SKIPN T,DPY
POPJ P,
SOJLE T,.+3
PPSEL
DPYPOS -1400
PPSEL 1
DPYPOS @DPPPOS
DPYSIZ @DPPSIZ
POPJ P,
LINCNT: SETZM TYOPNT
TYPDEC LINES
TYPCHR "
"
JRST POPJ1
;GETOUT, GETOU1, FINISH, FINI1, FINI2, GORPG, QUIT, CLOSIT
GETOUT: TRZE F,ATTMOD
JRST ATTEX
PUSHJ P,FINISH
GETOU1: CALLI
MOVE A,JOBFF
SOJ A,
CORE A, ;CORE BACK DOWN
JRST 4,. ;WHAT??
CALLI 12
FINISH: PUSHJ P,WRPAGE
FINI1: TLZE F,ENTRD
CLOSE DSKO, ;MAKE SURE THE FILE GETS OUT
PUSHJ P,TMPWRT
IFN BOOKMD, {
SKIPE BKPSW ;STARTED BY "READ" COMMAND?
PUSHJ P,BKPWRT ;YES, WRITE OUT <FILENM>.BKP FILE
};END BOOKMD
FINI2: PPACT ;STOP ANDY FROM WRITING
MOVE T,PPSIZ
ADDM T,SCRSIZ ;ERASE PP TOO
PUSHJ P,WIPE ;BLAST THE SCREEN
SKIPE DDACT ;WAIT FOR WIPE
DPYOUT [0↔0]
POPJ P,
GORPG: PUSHJ P,FINISH
MOVEI
MOVEI 17,1
BLT 17,17 ;SOMEWHERE IN HERE GARBAGE CAN CAUSE STORAGE MAP
MOVEI A,[SIXBIT /SYS RPG DMP/↔1↔0]
SWAP A,
JRST 4,.
QUIT: PUSHJ P,FLSPAG
PUSHJ P,FINI1
JRST GETOU1
CLOSIT: TLZN F,ENTRD
POPJ P,
RELEAS DSKO,
SETZM JOBJDA+DSKO
MOVE T,ICHN
CAIE T,DSKO
POPJ P,
MOVE A,IBLK
MOVEI D,EDFIL
MOVEI C,DSKO
PUSHJ P,IOPEN
PUSHJ P,OPNLUZ
POPJ P,
;NEWPAG, NEWPG, NEWPG0, NEWPG1, REREAD, PGINIT, NODEL, PGERR, FINSRT
JRST DIRSRC
NEWPAG: TRNE F,NEG
SUB A,XPAGES
TRNE F,ARG
TRNE F,REL
NEWPG: ADD A,CURPAG
NEWPG0: PUSH P,A
PUSHJ P,WRPAGE ;OUT WITH THE BAD PAGE
PUSHJ P,FLSPAG
AFSHIT←←0 ;BET YOU CAN'T GUESS WHAT THIS MEANS.
IFN AFSHIT,< ;THE FOLLOWING EXCERCISE IN BAD TASTE. 3-29-74
PUSH P,B
DATE A,
IDIVI A,=31*=12
CAIN B,=93
PUSHJ P,[AOS A,NEWFO1# ;SO IT WON'T BE TOO BOTHERSOME
TRNE A,3
POPJ P,
MOVE A,[1000,,[1B18]] ;SET TEMPORARY TO CHANNEL 22 (OCTAL)
VDSMAP A,
JFCL ;PROBABLE SKIP RETURN
MOVE A,[700015,,2] ;TEMP AUDIO MAP TO CH 15. 1/2 SECOND
ADSMAP A,
MOVSI A,4000 ;RESET TO PERMANENT MAPPING
VDSMAP A,
JFCL
POPJ P,]
POP P,B
>;IFN AFSHIT
POP P,A
NEWPG1:
REREAD: PUSHJ P,RDPAGE ;AND IN WITH THE GOOD
PUSH P,[PGERR]
PUSHJ P,CORCHK
PGINIT: MOVN A,GTDEL
ASH A,-1
ADD A,SLINE
PUSHJ P,SETWIN
MOVEI A,1
EXCH A,SLINE
PUSHJ P,SETARR
TRO F,DSPALL
POPJ P,
PGERR: SORRY NO SUCH PAGE
JRST POPJ1
FORMF: CAIN B,2
JRST FINSRT
MOVE A,BOTWIN
MOVE T,CURPAG
CAMGE T,PAGES
CAMG A,LINES
SOJA A,WIND1
MOVEI A,1
JRST NEWPG
FINSRT: MOVE D,INSCMD
PUSHJ P,XCMDX
JFCL
SOS (P)
POPJ P,
;UNWIND, WIND, WIND1, LT, GT, LTE, GTE, TOP, BOT, JMP, UPARR, DWNARR
UNWIND: MOVNS A
WIND: JUMPE A,CPOPJ
JUMPL A,[AOJA A,.+1]
MOVE B,SCRSIZ
IMULI A,-3(B)
ADD A,TOPWIN
WIND1: CAML A,LINES
ADDI A,1
PUSHJ P,SETARR
CAMG A,TOPWIN
SUBI A,-3(B)
JRST SETWIN
LT: MOVNS A
GT: ASH A,2
MOVAR1: AOS (P)
JRST MOVARR
LTE: SKIPA A,GTDEL
GTE: MOVN A,GTDEL
JRST NMVAR1
TOP: MOVE A,TOPWIN
PUSHJ P,SETARR
JRST ARRTOP
BOT: MOVE A,BOTWIN
SOJ A,
PUSHJ P,SETARR
JRST ARRBOT
JMP: MOVE A,ARRL
JRST SETWIN
UPARR: MOVNS A
DWNARR: PUSHJ P,MOVARR
PUSH P,[1]
PUSH P,[211] ;SET FOR CTRL1-TAB
TLNE F,NULLIN
SETZM -1(P) ;ONLY CRLF - FLUSH THE CTRL1-TAB (WILL LOSE AT END OF LINE)
JRST EDIT1
;XMARK--The `M' commands.
NMARKS←←10 ;Max. no. of marks.
ARRAY MARKS[NMARKS]
XMARK: MOVE D,ARRL ;Here on any type of M.
HRL D,CURPAG ;Form mark pointer to current location.
SETOB C,G ;Set two useful flags.
TRNE B,2 ;Was the <meta> bit typed ?
JRST INSMRK ;Yes.
MOVSI B,200000 ;Prepare to find first mark after (or before) current loc.
TRNE F,NEG ;If before, use neg. of all marks for comparison.
MOVNS D
FNDMK: MOVEI E,NMARKS-1
FNDML1: SKIPG T,MARKS(E);Unused array locations contain -1.
JRST FNDM2
TRNE F,NEG
MOVNS T
CAMLE T,D
CAML T,B
JRST FNDM2
MOVE C,E
MOVE B,T
FNDM2: SOJGE E,FNDML1 ;Search whole array.
JUMPGE C,FNDMK3 ;Did we find one ?
AOJN G,POPJ1 ;No. Is this the first try ?
MOVSI D,600000 ;Yes. Try again, starting at beginning (or end) of file.
JRST FNDMK
FNDMK3: PUSH P,C ;Found it.
HLRZ A,MARKS(C)
CAME A,CURPAG ;Save time if on right page already.
PUSHJ P,NEWPG0 ;Go to right page.
POP P,A
HRRZ A,MARKS(A)
SUB A,ARRL
JRST MOVARR ;Put arrow on right line.
INSMRK: TRNE F,NEG ;Insert or delete a mark. (Delete if `-' typed.)
EXCH C,D ;Deleting, so search for the current mark.
MOVEI E,NMARKS-1
INSMK1: CAME C,MARKS(E) ;Search for -1 (inserting) or current mark (deleting).
SOJGE E,.-1
JUMPL E,INMKER ;Did we find it ?
MOVEM D,MARKS(E);Yes. Replace with current loc. (inserting) or -1 (deleting).
POPJ P,
INMKER: MOVEI T,[ASCIZ /SORRY - TOO MANY MARKS/]
TRNE F,NEG
MOVEI T,[ASCIZ /SORRY - NO MARK HERE/]
OUTSTR (T)
JRST POPJ1
;DELLIN, DELPOS
;DELLIN DELETES C(A) LINES AT THE POINTER
DELLIN: TRNE F,EDITM
SOJN B,REEDIT ;FROM EDITOR AND NOT CTRL1
PUSH P,TOPWIN
JUMPGE A,DELPOS
MOVNS A ;MINUS DELETE - BACK UP THE ARROW, THEN TREAT AS PLUS
AOJ A,
CAMLE A,ARRL ;NMVARR WILL MAKE THIS CHECK,
MOVE A,ARRL ;BUT WE SHOULD ALSO LIMIT OUR DELETE
SOJ A,
PUSH P,A
PUSHJ P,NMVARR
MOVN A,(P)
ADDM A,-1(P) ;ADJUST WINDOW BY AMOUNT FLUSHED
POP P,A
DELPOS: SETZM DELPGS#
MOVE B,LINES
SUB B,ARRL
CAILE A,1(B)
MOVEI A,1(B) ;LIMIT US TO WHAT WE'VE GOT
JUMPE A,POPAJ
PUSH P,[0]
TLO F,NOCHK
MOVE B,ARRLIN
HLRZ G,(B)
MOVE C,A
PUSH P,C
;DELLP, DELL2
DELLP: SKIPGE T,1(B)
JRST DELPM
DELPR: TLNE T,WINBIT
SETZM WINLIN
LDB T,[111100,,1(B)]
MOVN T,T
ADDM T,CHARS
MOVEI A,(B)
HRRZ B,(B)
PUSHJ P,FSGIVE
SOJG C,DELLP
TLZ F,PMLIN
MOVE T,1(B)
TLNE T,PMARK
TLOA F,PMLIN
JRST DELL2
TRNE F,EDITM
JRST DELLP
DELL2: HRRZM B,ARRLIN
HRRM B,(G)
HRLM G,(B)
MOVSI T,ARRBIT
IORB T,1(B)
TRNE T,777
TLZA F,NULLIN
TLO F,NULLIN
SUB C,(P)
SUB P,[1,,1]
ADDM C,LINES
POP P,T
SKIPE E,DELPGS
PUSHJ P,ADJPG
PUSHJ P,LINSET
PUSHJ P,SETWRT
POP P,A
PUSHJ P,SETWIN ;RECOMPUTE
TRO F,DSPSCR+WRITE
TRNN F,EDITM
POPJ P,
PUSHJ P,DISP ;FROM EDIT MODE - REDISPLAY NOW
JFCL
PUSH P,EDCNM ;SET TO SPACE OUT TO OLD CURSOR POS
PUSH P,[240]
MOVE D,EDPNT
ADD D,[160000,,] ;BACK UP PNTR OVER CRLF
JUMPGE D,LINED ;CONCATENATE TEXT FROM NEW LINE & RE-EDIT
SUB D,[XOR 1]
JRST LINED
;DELPM, DELPM1, DELPM2, DELPM3
DELPM: TRNE F,REDNLY+EDDIR
JRST [TLO F,PMLIN↔JRST DELL2]
LDB T,[221200,,LLDESC+LPMTXT+1(B)]
LDB TT,[341000,,LLDESC+LPMTXT+1(B)]
IMULI TT,200*5
ADDI TT,(T)
SUBI TT,1
ADDM TT,-1(P)
JUMPE T,[SOJA T,.+2]
SUBI T,200*5+1 ;# NULLS + FF
ADDM T,CHARS
ADDM T,OCHRS ;KEEP RCOMP FROM HACKING
MOVE T,LLDESC+LPMTXT(B)
TRNE T,-1
HLLM T,(T)
TRNN T,-1
MOVEM T,XPLSTE
MOVS T,T
HLRM T,(T)
HLLM T,DELPGS
TRO F,UPDIR
HRRZ A,LLDESC+LPMTXT+1(B)
SUB A,DELPGS ;PAGE #'S MAY BE WRONG UNTIL WE GET TO ADJPG
PUSHJ P,DELPAG
AOS DELPGS
SOS XPAGES
MOVSI TT,DPBIT!D1BIT
ANDCAB TT,2(A)
TLNN TT,RPMASK
JRST [PUSHJ P,FSGIVE↔JRST DELPM3]
SKIPN T,DPLST
JRST [MOVEI T,DPLST↔HRLZM T,DPLST↔JRST DELPM2]
DELPM1: MOVE TT,2(T)
CAML TT,2(A)
JRST DELPM2
HRRZ T,(T)
CAIE T,DPLST
JRST DELPM1
DELPM2: HLL T,(T)
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
DELPM3: MOVE T,1(B)
JRST DELPR
;DELPAG, DELPG1, ADJPG, ADJPGL
DELPAG: PUSHJ P,FNDPAG
MOVEI A,(T)
DELPG1: MOVS T,(A)
MOVSI TT,DPBIT
SKIPL 2(A)
JRST .+3
HRRZM T,DIRPT
IORM TT,2(T)
HLRM T,(T)
MOVS T,T
HLLM T,(T)
HRRZ T,2(A)
MOVNI T,=12(T)
ADDM T,DIRSIZ
SOS PAGES
SOS CURPAG
TRO F,UPDIR
POPJ P,
ADJPG: HLRZ G,E
JUMPE G,CPOPJ
LDB TT,[221200,,1(G)]
ADDI T,(TT)
IDIVI T,200*5
DPB TT,[221200,,1(G)]
LSH T,34
ADDM T,1(G)
MOVNI E,(E)
ADJPGL: ADDM E,1(G)
HRRZ T,1(G)
MOVE A,[440700,,H]
MOVEI H,1
PUSHJ P,NUMSTR
MOVEM H,PMPAG-PMTXT-LPMTXT(G)
AOS T,TXTNUM
HRRM T,2-LLDESC-LPMTXT(G)
HRRZ G,(G)
JUMPN G,ADJPGL
POPJ P,
;RCOMP, RCOMP1, RCOMP2, RCOMPX
RCOMP: HLRZ T,2(G)
CAML T,ARRL
JRST RCOMP1
HRRZ G,(G)
JUMPN G,RCOMP
JRST RCOMPX
RCOMP1: MOVE T,CHARS
SUB T,OCHRS
ADDM T,XCHRS
LDB H,[221200,,1(G)]
ADDI T,(H)
IDIVI T,200*5
JUMPL TT,[ADDI TT,200*5↔SOJA T,.+1]
DPB TT,[221200,,1(G)]
LSH T,12+22
ADDM T,1(G)
JUMPE H,.+2
SUBI H,200*5
JUMPE TT,.+2
SUBI TT,200*5
SUB H,TT
ADDM H,CHARS
ADDM H,XCHRS
MOVE T,LINES
SUB T,OLINES
HRLZS T
RCOMP2: ADDM T,2(G)
HRRZ G,(G)
JUMPN G,RCOMP2
RCOMPX: MOVE T,CHARS
MOVEM T,OCHRS
MOVE T,LINES
MOVEM T,OLINES
POPJ P,
;DELETE, DELET1, ADDPAG
DELETE: MOVE A,CURPAG
AOJ A,
CAMLE A,PAGES
JRST PGERR
PUSH P,LINES
JSP B,ADDPAG
SOS CHARS ;-1 FF
POP P,T
MOVSI TT,ARRBIT!WINBIT
AND TT,BOTSTR+1
ANDCAM TT,BOTSTR+1
IORB TT,1(T)
TLNN TT,ARRBIT
JRST DELET1
TRNE TT,777
TLZ F,NULLIN
HRRZM T,ARRLIN
DELET1: TLNE TT,WINBIT
HRRZM T,WINLIN
HLLM T,(T)
MOVS T,T
HLRM T,(T)
POP P,T
ADDM T,LINES
MOVE A,CURPAG
PUSHJ P,DELPAG
PUSHJ P,FSGIVE
PUSHJ P,LINSET
PUSHJ P,SETWRT
JRST WRPAGE
ADDPAG: MOVE T,PAGE
HLL T,BOTSTR
PUSH P,T
HRLM P,(T)
MOVS T,T
HRRM P,(T)
PUSH P,B
PUSHJ P,RDPAG0
HRRZ T,-1(P)
CAIN T,BOTSTR
MOVEI T,-1(P)
MOVEI TT,PAGE
HRLM TT,(T)
EXCH T,PAGE
HRRM T,-1(P)
TRO F,DSPSCR
POPJ P,
;APPEND, APPLUZ
APPEND: TRNE F,EDDIR
POPJ P,
APPEN1: PUSH P,A
MOVE T,RELPGN
CAIL T,RPMASK
JRST APPLUZ
MOVE A,CURPAG
AOJ A,
CAMLE A,PAGES
JRST PGERR
AOS XPAGES#
PUSH P,LINES
MOVE T,CHARS
PUSH P,T
IDIVI T,200*5
JUMPE TT,.+3
MOVN TT,TT
ADDI TT,200*5
PUSH P,TT
JSP B,ADDPAG
HRLM P,(T)
MOVEI B,LLDESC+LPMTXT+2
PUSHJ P,FSGET
MOVSI T,TXTCOD
HLLM T,-1(A)
POP P,T
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
POP P,E
ADDM E,CHARS
POP P,T
SUB T,XCHRS
ADD E,T
ADDM E,XCHRS#
IDIVI T,200*5
DPB T,[121000,,TT]
HRL TT,CURPAG
MOVSM TT,LLDESC+LPMTXT+1(A)
POP P,E
AOJA E,APPEN2
APPLUZ: SORRY TOO MANY PAGES
JRST POPJ1
;APPEN2, PMTXT, PMPAG
APPEN2: ADDM E,LINES
HRLM E,LLDESC+LPMTXT+2(A)
MOVEI T,LLDESC+LPMTXT(A)
SKIPN D,XPLST
TROA D,XPLST#
HLRZ D,XPLSTE
HRLZM D,(T)
HRRM T,(D)
HRLZM T,XPLSTE#
MOVSI T,ARRBIT!WINBIT
AND T,BOTSTR+1
ANDCAM T,BOTSTR+1 ;MOVE BIT IF ARROW AT OLD END
TLO T,PMARK
MOVEM T,1(A)
TLNE T,ARRBIT
MOVEM A,ARRLIN
TLNE T,WINBIT
MOVEM A,WINLIN
AOS T,TXTNUM
MOVEM T,2(A)
ADD A,[PMTXT,,LLDESC]
MOVE B,A
BLT B,LPMTXT-1(A)
ADD A,[440700-PMTXT,,PMPAG-PMTXT]
MOVE T,CURPAG
PUSHJ P,NUMSTR
MOVE T,CHARS
MOVEM T,OCHRS#
MOVE T,LINES
MOVEM T,OLINES#
POP P,A
SOJG A,APPEN1
JRST LINSET
PMTXT: ASCID/|||||||| PAGE /
PMPAG: 1
ASCID/ ||||||||
/
LPMTXT←←.-PMTXT
;INSERT
INSERT: MOVEI B,LLDESC+LPMTXT+2
PUSHJ P,FSGET
MOVSI T,TXTCOD
HLLM T,-1(A)
MOVE T,ARRLIN
HLL T,(T)
MOVEM T,(A)
HRLM A,(T)
MOVSI TT,ARRBIT!WINBIT
AND TT,1(T)
ANDCAM TT,1(T)
TLO TT,PMARK
MOVEM TT,1(A)
MOVEM A,ARRLIN
TLNE TT,WINBIT
MOVEM A,WINLIN
MOVS T,T
HRRM A,(T)
SETZM 2(A)
ADD A,[PMTXT,,LLDESC]
MOVE B,A
BLT B,LPMTXT-1(A)
ADDI A,LPMTXT
AOS CHARS
AOS T,LINES
SKIPN G,XPLST
SOJA T,INSER6
;INSER1, INSER2, INSER3, INSER4, INSER5
INSER1: HLRZ T,2(G)
CAML T,ARRL
JRST [HLL G,(G)↔HRLM A,(G)↔JRST INSER2]
HRRZ G,(G)
JUMPN G,INSER1
MOVE G,XPLSTE
HRLZM A,XPLSTE
INSER2: HLRZ T,G
CAIN T,XPLST
JRST INSER7
HRRZ B,1(T)
HLRZ C,2(T)
INSER3: MOVEM G,(A)
HRRM A,(T)
MOVE TT,ARRL
HRLM TT,2(A)
HLRZ E,-LLDESC-LPMTXT(A)
MOVEI D,1⊗9
SUB C,ARRL
AOJGE C,INSER5
INSER4: ANDCMI D,1⊗9-1 ;AVOID CARRIES
ADDI D,@1(E)
HLRZ E,(E)
AOJL C,INSER4
INSER5: ASH D,-9
ADDM D,XCHRS
IDIVI D,200*5
HRLI B,(E)
DPB D,[341000,,B]
MOVEM B,1(A)
JUMPE E,INSER8
MOVN E,E
ADDI E,200*5
;INSER8, DIRADD
INSER8: ADDM E,XCHRS
ADDB E,CHARS
MOVEM E,OCHRS
AOS XPAGES
MOVEI E,1
MOVEI G,(A)
PUSHJ P,ADJPGL
MOVEI A,(B)
PUSHJ P,FNDPAG
PUSHJ P,DIRADD
MOVSI TT,DPBIT
AND TT,2(T)
ANDCAM TT,2(T)
JUMPE TT,.+2
HRRZM A,DIRPT
HLLM TT,2(A)
AOS CURPAG
TDO F,[PMLIN!NULLIN,,UPDIR!UPDTXT]
PUSHJ P,SETWRT
PUSHJ P,LINSET
MOVE B,ARRLIN
MOVE A,ARRL
HRLM A,LLDESC+LPMTXT+2(B) ;GOT AOSED BY RCOMP
AOJA A,SETARR
DIRADD: HRL T,(T)
MOVS T,T
DIRAD1: PUSH P,T
HRLM P,(T)
MOVS T,T
HRRM P,(T)
MOVEI B,LPDESC+1
PUSHJ P,FSGET
MOVSI T,DIRCOD
HLLM T,-1(A)
POP P,T
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
SETZM 1(A)
MOVEI TT,2
MOVEM TT,2(A)
MOVE TT,[BYTE (7)15,12,177]
MOVEM TT,LPDESC(A)
AOS PAGES
MOVEI TT,=12+2
ADDM TT,DIRSIZ
POPJ P,
;INSER6, INSER7, MARK
INSER6: MOVEM T,OLINES
HRLZM A,XPLSTE
MOVSI G,XPLST
MOVEI T,XPLST
INSER7: MOVE B,FIRPAG
MOVEI C,
JRST INSER3
MARK: PUSHJ P,INSERT
HRRZ A,LLDESC+LPMTXT+1(B)
JRST NEWPG0
;CONTQ
CONTQ: HLRZ B,@ARRLIN
CAIE B,PAGE
SKIPGE 1(B)
POPJ P,
HRRZ B,-1(B)
SUBI B,2
PUSHJ P,FSGET
MOVSI T,TXTCOD
HLLM T,-1(A)
HLRZ T,@ARRLIN
HRL T,ARRLIN
MOVSM T,(A)
HRRM A,(T)
HRLM A,@ARRLIN
MOVEM A,ARRLIN
AOS LINES
MOVSI B,1(T)
HRRI B,1(A)
MOVE T,B
ADD B,-1(A)
BLT T,-1-1-2(B)
HRRZ T,1(A)
LSH T,-9
ADDM T,CHARS
CAIG T,2
TLOA F,NULLIN
TLZA F,NULLIN!PMLIN
TLZ F,PMLIN
HRRZ B,(A)
MOVSI T,ARRBIT!WINBIT
AND T,1(B)
TLNE T,WINBIT
MOVEM A,WINLIN
ANDCAM T,1(B)
HLLM T,1(A)
PUSHJ P,LINSET
PUSHJ P,SETWRT
TLNE F,NULLIN
POPJ P,
PUSH P,[0]
AOBJN P,EDIT1
JRST 4,.
;ATTACH, ATTCH1, ARGCHK, ARGCHN
PUSHJ P,ATTSRC
ATTACH: PUSHJ P,ATTDO
PUSHJ P,ATTEX
PUSHJ P,ATTCH1
HRLM G,(C)
HRRM C,(G)
MOVSI T,ARRBIT
IORB T,1(C)
TRNN T,777
TLOA F,NULLIN
TLZ F,NULLIN
MOVSI T,ARRBIT
EXCH C,ARRLIN
ANDCAM T,1(C)
SKIPN WINLIN
SETOM BOTWIN
MOVN T,ATTSIZ
ADDM T,CHARS
MOVN T,ATTNUM
ADDM T,LINES
PUSHJ P,LINSET
PUSHJ P,GPAGL
MOVEM T,ATTLOC#
SETZM ATTPOS
JRST SETWRT
ATTCH1: MOVEI A,(C)
SKIPGE T,1(A)
JRST 4,.
TLZN T,WINBIT
POPJ P,
SETZM WINLIN
MOVEM T,1(A)
POPJ P,
ARGCHK: JUMPLE A,ARGCHN
MOVE T,LINES
SUB T,ARRL
CAILE A,1(T)
MOVEI A,1(T)
POPJ P,
ARGCHN: JUMPE A,CPOPJ
MOVN A,A
MOVE T,ARRL
CAILE A,-1(T)
MOVEI A,-1(T)
PUSH P,A
PUSHJ P,NMVARR
JRST POPAJ
;ATTDO, ATTDO0, ATTDO2, ATTDO1
ATTDO: TRNE F,REL
ADD A,ATTNUM
TRZE F,ATTMOD
XCT @(P)
ATTDO0: AOS (P)
PUSHJ P,ARGCHK
MOVEM A,ATTMOV#
SKIPG D,A
JRST POPAJ
SKIPE XPAGES
JRST ATTCHK
ATTOK: HLRZ G,@ARRLIN
MOVEM F,ATTFLG#
TRO F,ATTMOD
SETZM ATTSIZ
MOVEI E,ATTBUF
ATTDO2: HRRZ C,ARRLIN
ADDB A,ATTNUM
MOVEI T,(A)
CAILE T,ATTMAX
MOVEI T,ATTMAX
PUSHJ P,EXSET
ATTDO1: XCT @(P)
HRRM A,(E)
HRLM E,(A)
MOVEI E,(A)
LDB T,[111100,,1(A)]
ADDM T,ATTSIZ#
HRRZ C,(C)
SOJG D,ATTDO1
MOVEI A,ATTBUF
HRRM A,(E)
HRLM E,ATTBUF
JRST POPJ1
ATTCHK: PUSHJ P,GPAGL
HRL T,ARRL
PUSH P,T
ADDM A,ARRL
PUSHJ P,GPAGL
ANDI T,-1
POP P,TT
HLRZM TT,ARRL
CAIN T,(TT)
JRST ATTOK
SUB P,[1,,1]
OUTSTR [ASCIZ / MULTI-PAGE ATTACH NOT IMPLEMENTED.
/]
JRST POPJ1
;ATTREP, ATTEX
ATTREP: SKIPN A,ATTLOC
JRST ATTKIL
PUSH P,A
ANDI A,-1
CAME A,FIRPAG
PUSHJ P,NEWPG0
TRZN F,ATTMOD
JRST 4,. ;GET HERE IF NEWPAG FAILS
POP P,A
HLRZ A,A
PUSHJ P,SETARR
ATTEX: PUSHJ P,EXCLR
MOVEI T,
EXCH T,ATTNUM
ADDM T,LINES
MOVE T,ATTSIZ
ADDM T,CHARS
MOVS T,ATTBUF
MOVE TT,ARRLIN
HLL TT,(TT)
HRLM T,(TT)
HRRM TT,(T)
MOVS T,T
MOVS TT,TT
HRRM T,(TT)
HRLM TT,(T)
ANDI T,-1
MOVSI TT,ARRBIT
IORB TT,1(T)
TRNN TT,777
TLOA F,NULLIN
TLZ F,NULLIN
MOVSI TT,ARRBIT
EXCH T,ARRLIN
ANDCAM TT,1(T)
PUSHJ P,LINSET
MOVEI B,
EXCH B,ATTLOC
SETZM ATTPOS
PUSHJ P,GPAGL
MOVE TT,ATTFLG
CAMN T,B
TRNE TT,WRITE
JRST SETWRT
TRNE F,WRITE
PUSH P,[CLRWRT]
JRST SETWRT
;ATTKIL, ATTKL, ATTSRC, GPAGL, GPAGL0, GPAGL1, GPAGL2, GPAGL3, ATTWRT
ATTKIL: TRZN F,ATTMOD
JRST ERR
PUSHJ P,EXCLR
MOVE C,ATTNUM
HRRZ A,ATTBUF
TLO F,NOCHK
ATTKL: HRRZ B,(A)
PUSHJ P,FSGIVE
MOVEI A,(B)
SOJG C,ATTKL
TLZ F,NOCHK
PUSHJ P,CORCHK
SETZM ATTLOC
SETZM ATTPOS
SETZM ATTNUM
POPJ P,
ATTSRC: TRNE F,ARG
TRNE F,REL
JUMPGE A,[AOJA A,CPOPJ]
POPJ P,
GPAGL: SKIPE TT,XPLST
JRST GPAGL1
GPAGL0: MOVE T,FIRPAG
HRL T,ARRL
POPJ P,
GPAGL1: HLRZ T,2(TT)
CAML T,ARRL
JRST GPAGL0
GPAGL2: HLRZ T,2(TT)
CAML T,ARRL
JRST GPAGL3
HRRZ TT,(TT)
JUMPN TT,GPAGL2
MOVEI TT,XPLSTE
GPAGL3: HLRZ TT,(TT)
HRLZ T,ARRL
SUB T,2(TT)
HRR T,1(TT)
POPJ P,
ATTWRT: MOVEI T,WRITE
IORM T,ATTFLG
TRO F,DSPSCR
POPJ P,
;ATTCOP, ATTCP1, ATTCP
PUSHJ P,ATTSRC
ATTCOP: MOVSI T,ATTBUF
TRNN F,ATTMOD
MOVEM T,ATTBUF
PUSHJ P,ATTDO
JRST ATTCP
PUSHJ P,ATTCP1
SKIPE A,ATTMOV
PUSHJ P,MOVARR
SKIPE T,ATTMOV
PUSHJ P,GPAGL
MOVEM T,ATTPOS#
POPJ P,
ATTCP1: SUBI C,1
MOVEM C,FSBLK
HRRZ B,(C)
SUBI B,2
PUSHJ P,FSGET
AOS C,FSBLK
MOVSI TT,-1(C)
HRRI TT,-1(A)
BLT TT,-1(T)
MOVSI TT,ARRBIT!WINBIT
ANDCAM TT,1(A)
HLRZ E,ATTBUF
HRLM A,ATTBUF
MOVEI T,ATTBUF
MOVEM T,(A)
POPJ P,
ATTCP: TRNE F,REL
JRST ATTCP0
TRNN F,ARG
MOVE A,ATTNUM
PUSHJ P,ATTEX
JRST ATTCP3
;ATTCP0, ATTCPL, ATCMOR, ATTCP2, ATTCP3, GPAGL
ATTCP0: JUMPLE A,ATTCP2
TRO F,ATTMOD
CAMN A,ATTNUM
JRST POPAJ
AOS (P)
CAML A,ATTNUM
JRST ATCMOR
MOVEI T,(A)
CAILE T,ATTMAX
MOVEI T,ATTMAX
PUSHJ P,EXSET
SUB A,ATTNUM
ADDM A,ATTNUM
PUSHJ P,GPAGL
CAMN T,ATTPOS
SKIPA T,A
MOVEI T,
MOVEM T,ATTMOV
JUMPGE A,POPJ1
MOVN C,A
MOVEI B,ATTBUF
ATTCPL: HLRZ A,ATTBUF
HLRZ T,(A)
HRRM B,(T)
HRLM T,ATTBUF
LDB T,[111100,,1(A)]
MOVN T,T
ADDM T,ATTSIZ
PUSHJ P,FSGIVE
SOJG C,ATTCPL
JRST POPJ1
ATCMOR: SUB A,ATTNUM
PUSHJ P,ARGCHK
SKIPG D,A
JRST POPAJ
MOVEM A,ATTMOV
JRST ATTDO2
ATTCP2: PUSH P,A
PUSHJ P,ATTKIL
POP P,A
ATTCP3: MOVSI T,ATTBUF
MOVEM T,ATTBUF
JRST ATTDO0
;EDIT, EDIT1, LINED, LINL1, EDDSP, EDARG, EDARGX
;HERE IS WHERE WE GIVE THE CURRENT LINE TO THE LINE EDITOR
;AND LET THE SYSTEM WORRY ABOUT IT
EDIT: PUSH P,A ;SAVE REPEAT COUNT
DPB B,[70200,,C];GET BACK CONTROL BITS
PUSH P,C ;SAVE CHAR
EDIT1: MOVE D,[440700,,BUF] ;PLACE TO COPY TEXT TO
TLNE F,OFFEND+PMLIN
JRST EDNUL ;TRYING TO EDIT AT BOTTOM OF PAGE - EXTEND IT
LINED: MOVE A,[440700,,LLDESC]
ADD A,ARRLIN
LDB T,[1100,,1-LLDESC(A)]
CAIL T,40*5-2*40*5/10
JRST EDFULL
PUSHJ P,EXTST
TLNE F,NULLIN
HRLI A,350700
MOVEI DSP,EDDSP-2
MOVSI E,LSPC
MOVEI B,
LINL1: ILDB C,A ;HERE WE COPY OVER THE TEXT INTO BUF (MAINLY TO FIX TABS)
TDNE E,CTAB(C)
XCT @CTAB(C)
IDPB C,D
AOJA B,LINL1
EDDSP: JRST EDCR ;DONE WITH LINE
JRST 4,.
JRST EDTAB ;TAB - SKIP EXTRA SPACES
JRST 4,.
JRST 4,.
EDARG: IDIVI A,=10
MOVEI T,200+"0"(B)
JUMPE A,EDARGX
IDIVI A,=10
HRROI A,200+"0"(A)
TRNE A,17
IDPB A,D
ADDI B,200+"0"
IDPB B,D
EDARGX: IDPB T,D
POPJ P,
;EDFULL, EDTAB, EDNUL, EDCR, AGAIN, EDRP1, EDRPT
EDFULL: OUTSTR [ASCIZ /LINE TOO LONG FOR LINE EDITOR.
/]
SUB P,[2,,2]
JRST POPJ1
EDTAB: IDPB C,D ;COPY THE TAB
HRLS B
TLO B,-10
IBP A ;SKIP OVER THE SPACES
AOBJN B,.-1
IBP A
JRST LINL1
EDNUL: MOVEI C,15
EDCR: IDPB C,D ;END OF LINE - STORE CR
MOVEI C,12
IDPB C,D ;AND LF
MOVEI C,
IDPB C,D ;AND NULL
AGAIN: TLNE D,760000
JRST .-2 ;GET TO WORD BOUNDARY
ADD D,[430200,,1] ;SET TO NEXT WORD - MAKE IT 9 BITS
HRRZM D,PTPNT ;SAVE PNTR FOR LATER
XCT LEPREP ;DO LEYPOS NOW ON DD (SO PTLOAD WILL MAKE CORRECT TABS)
SKIPN A,EDMOV# ;Do we want to position the cursor out in the line somewhere ?
JRST EDRP0 ;No.
SETZM EDMOV
PUSHJ P,EDARG
MOVEI C,240 ;α<space>
IDPB C,D
EDRP0: POP P,C ;GET CHAR
POP P,A ;& # TIMES TO PUT IT IN
CAILE A,=200
MOVEI A,=200 ;LET'S NOT BE RIDICULOUS
JUMPLE A,EDGL ;DON'T STORE IF NONE
TRNE C,200 ;If a ctrl chr.,
PUSHJ P,EDARG ; store the repeat arg.
EDRPT: CAILE A,=99
MOVEI A,=99
IDPB C,D
SOJG A,.-1 ;STORE IT N TIMES (If we have just been to EDARG, A≤0.)
;EDGL, EDGL1, EDGL2, EDGL2A
;HERE WE ACTUALLY GIVE THE TEXT TO THE SYSTEM, FOLLOWED BY N COPIES OF THE
;INITIAL CHAR, FOLLOWED BY WHATEVER IS IN THE INPUT BUFFER WHEN WE DO IT
EDGL: MOVEI C, ;INIT CHAR TO NULL
INCHRS C ;LOOK FOR INPUT
PTLOAD [0↔BUF] ;THAT'S IT - QUICK! GET THE LINE OUT BEFORE HE TYPES MORE
CAIN C,15
INCHRS C
JRST .+2
XORI C,15≠12
IDPB C,D ;STORE THE CHAR (ALL 9 BITS) OR A NULL IF WE FINISHED
JUMPN C,EDGL ;KEEP GOING IF WE READ SOMETHING
PTWRS9 PTOUT ;OTHERWISE GIVE THE REST TO THE SYSTEM
TRO F,EDITM
PUSHJ P,DISP ;Update display.
XCT LINTST
INWAIT A ;NOW WAIT FOR IT TO COME BACK AND SEE HOW MUCH THERE IS
PUSHJ P,EXCLR
MOVEM A,EDSIZ# ;REMEMBER SIZE
MOVSI E,LSPC
MOVEI DSP,EDGDSP-2
SETZB B,TT
MOVE T,A
MOVE D,[440700,,BUF] ;WHERE TO STORE AS WE GOBBLE IT BACK
TRO F,DSPSCR
TRZA F,EDBRK
EDGL1: SOS EDSIZ
EDGL2: TTYUUO 2,C ;(a real INCHRS) ;READ CHAR - MAKE SURE THERE IS ONE
JRST [ MOVNS A ;HMMM... THE SYSTEM LIED TO US - FUDGE IT ANYWAY
ADDM A,EDSIZ ;(THIS SHOULDN'T HAPPEN, BUT IT DOES ANYWAY)
JRST EDGL3]
TRNE C,600
JRST EDACT ;ANYTHING WITH BUCKY BITS IS AN ACTIVATOR
TDNE E,CTAB(C)
XCT @CTAB(C) ;AS WELL AS SELECTED OTHER CHARS
EDGL2A: IDPB C,D
AOJ B,
SOJG A,EDGL2 ;WE THINK WE KNOW HOW MANY THERE ARE
;EDGL3, EDGL4, REEDIT, EDTMOR, EDGDSP, EDTAB2, PTOUT, PTPNT
;HERE WE HAVE FINISHED THE LINE AND NOW HAVE TO DISPATCH ON THE ACTIVATION CHAR
EDGL3: MOVEI C,15 ;TERMINATE IT IN CASE WE HAVE TO RE-EDIT
IDPB C,D
MOVEI C,
IDPB C,D
OUTSTR [ASCIZ /
/]
MOVEM D,EDPNT#
MOVEM B,EDCOLS# ;SAVE TOTAL DPY COLUMNS
MOVEM TT,EDTTBS#;& # TABS
TRZ F,ARG+REL+NEG+EDITM
HRRZ C,EDCHR ;HERE WE GO THROUGH THE COMMAND DISPATCH PROCEDURE
HRROI DSP,CMDSP
PUSHJ P,CMDEX
JRST ALTCHK
TRO F,EDITM ;FLAG THAT WE CAME FROM LINE EDIT
TLNE D,NOEDIT ;OR IF WE SHOULD GO TO THIS COMMAND IMMEDIATELY
JRST [TLNE D,DOEDIT↔PUSH P,[REEDIT]↔JRST (D)] ;DO THE CMD, MAYBE COME BACK
TLNE D,DOEDIT
JRST EDITIT ;THIS ONE WANTS TO COMPLETE THE EDIT FIRST
REEDIT: PUSH P,EDCNM ;WE DON'T LIKE THIS - EDIT IT AGAIN AT THE SAME CURSOR POS
PUSH P,[240] ;THIS SHOULD GET US THERE
EDTMOR: MOVEI C, ;IN CASE WE NEED NULLS
MOVE T,EDCOLS
PUSHJ P,EXTST
MOVE D,EDPNT
JRST AGAIN
EDGDSP: JRST EDCR2 ;SPECIAL THINGS FOR CR
JRST EDACT ;LF
JRST EDTAB2 ;TAB
JRST EDGL1 ;FF
JRST EDACT ;ALTMODE
EDTAB2: SKIPGE EDTABP
MOVEM B,EDTABP# ;REMEMBER POS OF FIRST TAB FOR REPRST
TRO B,7 ;DIDDLE COL POS
AOJA TT,EDGL2A ;& COUNT TABS
ALTCHK: TLNE D,10000 ;USER MODE SET BY JSP D,CPOPJ
JRST REEDIT
POPJ P,
IMPURE
PTOUT: 0
PTPNT: 0
PURE
;EDCR2, EDACT, EDITIT, REPLIN, PUTBAK
EDCR2: SOJLE A,.+2 ;JUST IN CASE WE'RE RUNNING OUT
TTYUUO 2,C ;GET LF (CR'S ALWAYS HAVE LF'S)
JRST 4,. ;GLEEP?
SUBI T,1(A) ;FIND CHAR POS (1 COMPENSATES FOR SOJLE)
TDCA C,[-1,,15≠12] ;MAKE IT A CR (WITH BITS FROM LF) AND AVOID NORMAL SUB
EDACT: SUB T,A ;PLAIN OLD ACTIVATION CHAR - SEE WHERE IT IS
MOVEM B,EDPOS# ;SAVE ALL KINDS OF CRAP ABOUT IT - B has horiz. position.
MOVEM T,EDCNM# ;Chr. position.
MOVEM C,EDCHR# ;Chr.
MOVEM TT,EDTBS# ;No. of tabs before it.
SOJLE A,EDGL3 ;MAYBE WE'RE DONE
TRO F,EDBRK ;NOPE - FLAG IT AS A BROKEN LINE
SETOM EDTABP ;PREPARE TO LOCATE TAB
JRST EDGL2 ;AND GET MORE
EDITIT: FOR X IN(D,A,EDCNM){PUSH P,X↔} ;COMMAND WANTS EDIT DONE - DO IT AND DISPATCH
PUSHJ P,REPLIN
POP P,EDCNM
POP P,A
POPJ P,
REPLIN: SKIPGE EDCHR ;HERE WE REPLACE THE CURRENT LINE TEXT WITH THE EDITED VERSION
SOS EDSIZ ;FUDGE FOR LF (IF PRESENT)
SOS T,EDSIZ ;AS WELL AS FOR ACTIVATION CHAR
MOVEM T,EDCNM ;A RANDOM PLACE TO SAVE IT
MOVE T,EDTTBS
LSH T,1
ADD T,EDCOLS ;# COLS + 2 * # TABS = TOTAL # CHARS WITH EXPANDED TABS
PUTBAK: TLO F,NULLIN
PUSHJ P,EDPUT ;COPY THE TEXT (SHUFFLES ASSUMING C(T) CHARS)
SKIPN EDCNM
JRST [ MOVEI C,40 ;EMPTY LINE - PUT IN A SPACE FOR DD
IDPB C,A
JRST .+1]
FOR X IN(15,12) ;TERMINATE IT
{ MOVEI C,X
IDPB C,A
} TDZA C,C
IDPB C,A
TLNE A,760000
JRST .-2 ;FLUSH ANY GARBAGE IN THE REST OF THE WORD
MOVE T,EDCNM ;# CHARS
ADDI T,2 ;ACCOUNT FOR CRLF
DPB T,[111100,,TT] ;COMBINE WITH # COLS (FROM EDPUT)
LDB C,[111100,,1(D)] ;OLD # CHARS
SUB T,C
ADDM T,CHARS ;UPDATE COUNT BY DIFFERENCE
HRRM TT,1(D)
JRST SETWRT
;EDPUT, EDPLR
;EDPUT ADJUSTS BUFFER TO TAKE C(T)+3 (CR-LF-NUL) CHARS INSTEAD OF THE CURRENT LINE,
;THEN COPIES C(EDCNM) CHARS FROM BUF, EXPANDING TABS
EDPUT: ADDI T,4+2+5*LLDESC ;<ROUND UP>+<CR-LF>+<EXTRA WDS>
IDIVI T,5 ;# WDS
TLNE F,OFFEND+PMLIN
JRST EDPLUZ ;OOPS - IT'S A PHONY LINE
EDPLR: MOVE A,ARRLIN
HRRZ B,-1(A) ;OLD # WDS
CAIN T,-2(B)
JRST EDPS
CAIL T,-2(B)
TLO F,NOCHK
MOVE B,T
PUSH P,1(A)
MOVE T,(A)
PUSH P,T
HRLM P,(T)
MOVS T,T
HRRM P,(T)
PUSHJ P,FSGIVE
TLZ F,NOCHK
PUSHJ P,FSGET
MOVSI T,TXTCOD
HLLM T,-1(A)
MOVEM A,ARRLIN
POP P,T
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
POP P,T
MOVEM T,1(A)
TLNE T,WINBIT
MOVEM A,WINLIN
SETOM LLDESC(A)
CAIG B,LLDESC+1
JRST EDPS
MOVSI T,LLDESC(A)
HRRI T,LLDESC+1(A)
ADDI B,(A)
BLT T,-1(B)
;FALLS THRU
;EDPS, EDPL, EDPLUZ
EDPS: AOS T,TXTNUM
MOVEM T,2(A)
MOVEI D,(A)
ADD A,[440700,,LLDESC]
MOVE B,[440700,,BUF]
MOVEI TT,
SKIPN T,EDCNM
POPJ P,
TLZ F,NULLIN
EDPL: ILDB C,B
IDPB C,A
CAIE C,11 ;THE ONLY THING WE WORRY ABOUT
AOJA TT,[ SOJG T,EDPL
POPJ P,]
MOVEI C,40 ;TAB - APPEND SOME SPACES
HRLS TT
TLO TT,-10
IDPB C,A
AOBJN TT,.-1
MOVEI C,11
IDPB C,A
SOJG T,EDPL
POPJ P,
EDPLUZ: PUSH P,T ;HERE AFTER EDITING LINE N+1 (PHONY NULL LINE MADE AT EDNUL)
PUSHJ P,INSONA ;MAKE A REAL LINE
POP P,T ;RESTORE # WORDS
JRST EDPLR
;EDSNK, EDSNK2, EDSNK3, ESDSP, ESALT
EDSNK: TRO F,EDITM
PUSHJ P,DISP
XCT LINTST
TRO F,DSPSCR
MOVEI DSP,ESDSP-2
PUSHJ P,LINS1
JRST EDSNK2
INCHRW T
LSH T,-7
DPB T,[70200,,C]
EDSNK2: MOVEM C,COMCHR
TLNN F,OFFEND+PMLIN
JRST EDSNK3
PUSH P,B
PUSH P,D
PUSH P,TT
PUSHJ P,INSONA
POP P,TT
POP P,D
POP P,B
EDSNK3: PUSHJ P,LINSTO
MOVE C,COMCHR
ANDI C,577
CAIE C,415
POPJ P,
MOVEI A,1
JRST MOVARR
ESDSP: JRST POPJ1
POPJ P,
JRST LINTAB
JRST LINGLP
JRST ESALT
ESALT: SUB P,[1,,1]
MOVE A,ARRLIN
AOS T,TXTNUM
HRRM T,2(A)
POPJ P,
;CRDSP, REGCR, REGCR1, REGCR2
;FOR CR WE DISPATCH ON CONTROL BITS
CRDSP: NOEDIT!SACMD!SSCMD,,REGCR
DOEDIT!SSCMD,,CONTCR
NOEDIT!NOATT,,METACR
NOEDIT!NOATT,,DUBLCR
TLO F,OKF
REGCR: TRNN F,EDITM ;REG CR - IF EDITING
JRST REGCR1
PUSHJ P,LECR ;TAKE APPROPRIATE ACTION
JRST REGCR2 ;NO - JUST MOVE
PUSH P,D
PUSHJ P,REPRST
POP P,D
PUSH P,[1]
PUSH P,[311] ;SET UP INSERT MODE FOR NEW LINE
JRST EDTMOR
REGCR1: AOS (P)
REGCR2: TRNE F,ATTMOD
JRST MOVARR
MOVE B,ARRL ;HERE WE'RE JUST MOVING - SEE WHERE TO
CAMLE B,LINES
JUMPG A,INSONE ;GOING OFF THE BOTTOM - ADD A LINE
JRST MOVARR ;OK - JUST MOVE IT
;CONTCR, CNTCR2, METACR, REPRST, REPRS2
PUSHJ P,CNTCR2
CONTCR: TRNE F,EDITM
POPJ P,
SKIPN A,SRCOFF
JRST POPJ1
MOVEM A,EDMOV
MOVEI A,
JRST EDIT
CNTCR2: MOVE D,[EDOK*10,,EDIT]
MOVEI A,
POPJ P,
METACR: TRNE F,EDITM
PUSHJ P,LECR ;DO LINE EDIT STUFF IF NECESSARY
JRST INSONE ;NOT MIDDLE OF LINE - JUST ADD BLANK LINE
REPRST: MOVN T,EDCNM ;HERE WE STORE THE REST OF THE LINE AFTER THE ACTIVATOR
ADDM T,EDSIZ ;BY UPDATING ALL THE PARAMS BY THE AMOUNT ALREADY DONE
AOSG T,EDTABP
JRST REPRS2
SOS TT,T ;HERE WE FUDGE FOR THE TAB WHOSE POSITION
SUB TT,EDPOS ;(AND HENCE SIZE) IS CHANGING (SIGH)
ORCMI T,7
ORCMI TT,7
SUB T,TT
REPRS2: SUB T,EDPOS
ADDM T,EDCOLS
MOVN T,EDTBS
ADDM T,EDTTBS
JRST REPLIN
;LECR, DUBLCR, DUBCR2
;HERE WE HANDLE ALL FLAVORS OF CR FROM THE LINE EDITOR
;IF IT'S AT THE END WE JUST REPLACE THE TEXT AND RETURN
;IF IT'S IN THE MIDDLE WE REPLACE UP TO THE BREAK, MAKE A NEW LINE,
;MOVE THE REMAINING TEXT DOWN IN BUF, AND SKIP RETURN
LECR: TRNN F,EDBRK ;MIDDLE OF LINE?
JRST [ PUSH P,A
PUSHJ P,REPLIN ;NO - REPLACE WHOLE LINE
POP P,A
POPJ P,] ;& RETURN
AOS (P) ;TELL CALLER WE'RE SPLITTING A LINE
MOVE T,EDTBS
LSH T,1 ;2 TABS/TAB
ADD T,EDPOS
PUSH P,C
PUSHJ P,PUTBAK ;PUT FIRST PART BACK
PUSH P,B
MOVEI A,1
PUSHJ P,MOVARR ;TO THE NEXT LINE
PUSHJ P,INSONA ;AND MAKE A NEW ONE
POP P,B
MOVE D,[440700,,BUF]
ILDB C,B ;COPY REST OF TEXT DOWN WHERE REPLACER EXPECTS IT
IDPB C,D
JUMPN C,.-2
POP P,C
POPJ P,
DUBLCR: TRNN F,EDITM
JRST DUBCR1
PUSHJ P,LECR
JRST DUBCR3
TRZ F,EDITM+EDBRK
PUSH P,A
PUSHJ P,REPRST ;PUT THE REST BACK
POP P,A
DUBCR1: TRNN F,ARG
JRST LININS ;NO ARG -ENTER LINE INSERT MODE
DUBCR2: MOVNS A ;INVERT SENSE OF ARROW MOVING
JRST INSNUL ;ARG GIVEN - INSERT N BLANK LINES
DUBCR3: TRNE F,ARG
JRST DUBCR2
MOVEI A,1
PUSHJ P,MOVARR
JRST LININS
;INSONA, INSONE, INSNUL, INSNLP
;INSNUL INSERTS |C(A)| NULL LINES BEFORE (+) OR AFTER (-) THE ARROW
INSONA: SKIPA A,[-1]
INSONE: MOVEI A,1
INSNUL: MOVM D,A ;# TO INSERT
JUMPE D,CPOPJ
PUSH P,A
ADDM D,LINES
PUSHJ P,LINSET ;# LINES HAS CHANGED
MOVEI B,(D)
LSH B,1
ADDM B,CHARS
MOVSI T,WINBIT
SKIPE A,WINLIN
ANDCAM T,1(A)
SETZM WINLIN
MOVEI B,LLDESC+1
MOVSI C,TXTCOD
MOVSI E,ARRBIT
MOVE G,[ARRBIT,,2000]
MOVE H,[ASCID/
/]
INSNLP: PUSHJ P,FSGET
HLLM C,-1(A)
MOVE T,ARRLIN
HLL T,(T)
MOVEM T,(A)
HRLM A,(T)
ANDCAM E,1(T)
MOVS T,T
HRRM A,(T)
MOVEM A,ARRLIN
MOVEM G,1(A)
AOS T,TXTNUM
MOVEM T,2(A)
MOVEM H,LLDESC(A)
SOJG D,INSNLP
PUSHJ P,SETWRT
MOVE A,TOPWIN
SKIPL (P)
ADD A,(P) ;MOVE WINDOW INSTEAD OF ARROW
PUSHJ P,SETWIN ;RECOMPUTE
POP P,A ;ORIGINAL ARG
JUMPGE A,MOVARR
TLO F,NULLIN
TLZ F,PMLIN
POPJ P,
;LININS, LINSLP, LINS1, LINGLP, LIDSP, LINTAB
LININS: MOVEI T,"↔"
DPB T,[10700,,ARRON]
MOVEM F,FSAV#
TLZ F,TF1
LINSLP: PUSHJ P,INSONA
TRO F,EDITM
PUSHJ P,DISP
XCT LINTST
MOVEI DSP,LIDSP-2
PUSHJ P,LINS1
JRST LINCOM
JRST LINSLP
POPJ P,
LINS1: MOVSI E,LSPC
SETZB B,TT
SETOM BUF
MOVE T,[BUF,,BUF+1]
BLT T,BUF+37
MOVE D,[440700,,BUF]
LINGLP: INCHWL C
TRNE C,600
POPJ P,
TDNE E,CTAB(C)
XCT @CTAB(C)
IDPB C,D
AOJA B,LINGLP
LIDSP: JRST LINCR1
POPJ P,
JRST LINTAB
JRST LINGLP
JRST LINALT
LINTAB: IDPB C,D
SUB TT,B
HRLS B
TLO B,-10
MOVEI T,40
IDPB T,D
AOBJN B,.-1
IDPB C,D
ADDI TT,1(B)
JRST LINGLP
;LINCR1, LINCR, LICCR, LINALT, LINCOM
LINCR1: INCHRW T
CAIN T,212
JRST LICCR
LINCR: PUSHJ P,LINST1
MOVEI A,1
PUSHJ P,MOVARR
JRST POPJ1
LICCR: MOVEI T,"→"
DPB T,[10700,,ARRON]
MOVEI T,2
ADDM T,(P)
JRST LINSTO
LINALT: SUB P,[1,,1]
MOVEI T,"→"
DPB T,[10700,,ARRON]
JUMPN B,LINSTO
MOVEI A,1
TRZ F,EDITM
PUSHJ P,DELLIN
TLZE F,TF1
POPJ P,
MOVE T,FSAV
TRNN T,WRITE
JRST CLRWRT
POPJ P,
LINCOM: MOVEM C,COMCHR ;DO THIS CMD LATER
MOVEI T,"→"
DPB T,[10700,,ARRON]
;FALL INTO LINSTO
;LINSTO, LINST1
LINSTO: MOVEI C,15
LINST1: TLO F,TF1+NULLIN
JUMPE B,[MOVEI T,40↔IDPB T,D↔AOJA TT,.+2]
TLZ F,NULLIN
IDPB C,D
MOVEI C,12
IDPB C,D
LDB E,[370300,,D]
MOVEI T,-BUF+1(D)
TDZA C,C
IDPB C,D
TLNE D,760000
JRST .-2
IMULI T,5
SUB T,BTAB(E)
SUB T,TT
MOVEI TT,-2(T) ;ACCOUNT FOR OLD CRLF
ADDM TT,CHARS
EXCH B,D
MOVEI B,-BUF+1+LLDESC(B)
DPB T,[111100,,D]
HRRZ A,ARRLIN
HLL D,1(A)
MOVE T,(A)
PUSH P,T
HRLM P,(T)
MOVS T,T
HRRM P,(T)
TLO F,NOCHK
PUSHJ P,FSGIVE
TLZ F,NOCHK
PUSHJ P,FSGET
MOVSI T,TXTCOD
HLLM T,-1(A)
MOVEM A,ARRLIN
POP P,T
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
MOVEM D,1(A)
TLNE D,WINBIT
MOVEM A,WINLIN
AOS T,TXTNUM
MOVEM T,2(A)
ADD A,[BUF,,LLDESC]
ADDI B,-LLDESC(A)
BLT A,-1(B)
;SETWRT, SETWR2, SETWRX, BTAB, BUF, RBUF
SETWRT: SKIPE G,XPLST
PUSHJ P,RCOMP
TRO F,DSPSCR
MOVE H,WFLAG
TRO F,WRITE
TLO H,"W"⊗13
TRNE F,FILLUZ
JRST SETWR2
MOVE T,CHARS
CAMLE T,ROOM
JRST [ TRO F,XPAGE
TLO H,"X"⊗4
JRST SETWR2]
TRZ F,XPAGE
TLZ H,3760
SETWR2: HLRZ T,@ARRLIN
CAIN T,PAGE
TLOA T,PMARK
MOVE T,1(T)
TLNE T,PMARK
TROA F,UPDTXT
TRNE F,UPDIR+UPDTXT
TRO H," D"⊗1
SETWRX: CAMN H,WFLAG
POPJ P,
MOVEM H,WFLAG
MOVEM H,WFLAG2
MOVE G,SCRTOP
HLLZS DPYTAB(G)
POPJ P,
BTAB: 0↔@↔5↔3↔1↔@↔4↔2
;FRD, FRD0, FRD1, NOEXT, NOPRG, NOPPN, NOSWIT, SWITL
FRD: SETZM (D)
SETZM 1(D)
SETZM 2(D)
MOVE T,PPN
MOVEM T,3(D)
MOVSI T,'DSK'
MOVEM T,-1(D)
SETZM 4(D)
FRD0: TLZ F,TF1
TLZ D,1740
PUSHJ P,GETNAM
CAIN C,":"
JRST SETDEV
JUMPE A,FRD1
MOVEM A,(D)
TLO D,40
TLNE D,200000
SETZM 1(D)
FRD1: CAIE C,"."
JRST NOEXT
PUSHJ P,GETNAM
HLLZM A,1(D)
TLO D,100
NOEXT: CAIE C,"["
JRST NOPP2
PUSHJ P,GETP
JUMPE A,.+3
HRLM A,3(D)
TLO D,200
CAIE C,","
JRST NOPRG
PUSHJ P,GETP
JUMPE A,NOPRG
HRRM A,3(D)
TLO D,400
NOPRG: CAIE C,"]"
JRST NOPPN
PUSHJ P,TYI
JFCL ;used to be JRST FRDX, which didn't initialize flags, page & line.
NOPPN: TLNE D,200000
TLNN D,1740
JRST SWLOP
NOPP1: SETOM SLINE
SETOM SPAGE
HLLZS CREASW
SETZM RDONLY
IFN BOOKMD, {
SETZM BOOKSW
};END BOOKMD
SETZM QUIETF
SETZM 4(D)
MOVSI T,'DSK'
TLNN D,1040
MOVEM T,-1(D)
SWLOP: CAIN C,"("
JRST SWITL
CAIN C,"/"
JRST SWIT1
FRDX: CAIE C,15
CAIN C,";"
JRST POPJ1
CAIE C,"←"
CAIN C,"→"
AOS (P)
POPJ P,
NOPP2: TLNE D,200000
TLNN D,40
JRST NOPPN
MOVE T,PPN
MOVEM T,3(D)
JRST NOPP1
SWIT1: PUSHJ P,DOSWIT
NOSWIT: PUSHJ P,TYI
JRST FRDX
JRST SWLOP
SWITL: PUSHJ P,DOSWIT
CAIN C,")"
JRST NOSWIT
TLNE T,FSPC
JRST SWLOP
JRST SWITL
;SETDEV, GETNAM, GETNML, GETP, GETPL, DTYI1, DTYI, DTYI2
SETDEV: MOVEM A,-1(D)
TLO D,1000
JRST FRD0
;ACCUMULATE LEFT-ADJUSTED SIXBIT. FROM TTY. TO A.
GETNAM: MOVE B,[440600,,A] ;ACCUMULATE SIXBIT IN A
MOVEI A,0
GETNML: PUSHJ P,DTYI ;GET A CHARACTER
POPJ P, ;SOME SORT OF DELIMITER
SUBI C,40 ;MAKE IT SIXBIT
TLNE B,770000
IDPB C,B ;STUFF SIXBIT UNLESS OVERFLOWING
JRST GETNML ;GATHER MORE
;ACCUMULATE RIGHT ADJUSTED SIXBIT. FROM TTY. TO A.
GETP: MOVEI A, ;ACCUMULATE IN A.
GETPL: PUSHJ P,DTYI ;GOBBLE.
POPJ P, ;DELIMITER SEEN
TRNE A,770000 ;FULL YET?
JRST GETPL ;YES. WAIT FOR DELIM
LSH A,6 ;MAKE ROOM
IORI A,-40(C) ;ADD THIS CHARACTER
JRST GETPL ;LOOP
DTYI1: TLCA F,TF1 ;TOGGLE ESCAPE FLAG
DTYIS: JUMPN A,CPOPJ
DTYI: PUSHJ P,TYIU ;READ TTY OR RESCANNED DATA
POPJ P, ;NONE LEFT
CAIN C,"↓" ;TOGGLE ESCAPE MODE?
JRST DTYI1 ;YES. DO IT
TLNE F,TF1 ;IN ESCAPE MODE?
JRST DTYI2 ;YES. NEARLY ANYTHING GOES.
TLNE T,FSPC ;IS CHARACTER A SPECIAL?
POPJ P, ;YES. RETURN IT
CAIE C,11
CAIN C,40
JRST DTYIS ;IGNORE SPACES AND TABS
DTYI2: CAIGE C,40 ;LEGAL?
TLZ F,TF1 ;NO! CLEAR QUOTE MODE FLAG.
JRST POPJ1 ;RETURN THIS AS LEGAL CHARACTER
;DOSWIT, NTYI, NTYIL, NTYIM, EDFIL, EDFIL2, SRCFIL, DSTFIL
DOSWIT: PUSHJ P,NTYI
JUMPL D,CPOPJ
CAIN C,"L"
MOVEM A,SLINE#
CAIN C,"P"
MOVEM A,SPAGE#
CAIN C,"N"
HRLOM D,4(D)
CAIN C,"R"
SETCAM A,RDONLY#
CAIN C,"Q"
SETCAM A,QUIETF#
CAIN C,"C"
SETCAM A,CREASW#
IFN BOOKMD, {
CAIN C,"B"
SETCAM A,BOOKSW#
SKIPE BOOKSW
SETOM RDONLY ;BOOKSW IMPLIES RDONLY ALSO
};END BOOKMD
POPJ P,
NTYI: MOVEI A,
NTYIL: PUSHJ P,TYIU
POPJ P,
TLNN T,NUMF
JRST NTYIM
IMULI A,12
ADDI A,-"0"(C)
JRST NTYIL
NTYIM: JUMPN A,CPOPJ
CAIE C,"-"
POPJ P,
PUSHJ P,NTYIL
MOVN A,A
JUMPN A,CPOPJ
MOVNI A,1
POPJ P,
IMPURE
0
EDFIL: BLOCK 6
0
EDFIL2: BLOCK 6
0
SRCFIL: BLOCK 5
0
DSTFIL: BLOCK 5
PURE
;RSCAN, RSCAN0, RSCAN1, RSCAN2, RSCAN3, RSCAN4, RSCN4B, RSCN4C, RSCN4A, RSCN0A
;CALLED FROM BEG0. RESCAN TTY.
; RETURNS RSPNT,TYIPNT, AND SYSCMD
; TYIPNT = BYTE POINTER TO FILE NAME PORTION OF COMMAND LINE.
; SYSCMD = SIXBIT COMMAND NAME (2 LETTERS) FOR EDITOR COMMANDS
RSCAN: RESCAN T ;RESCAN TTY (HERE AT NORMAL START)
JUMPLE T,CPOPJ ;NOTHING THERE?
;ENTER HERE FOR DEBUGGER (DON'T DO RESCAN, SET T INFINITE)
RSCAN0: PUSHJ P,RSTYI1 ;READ CHARACTER FROM TTY. UPPER CASE
POPJ P, ;NONE THERE
SOJLE T,CPOPJ ;DECREMENT COUNT. RETURN IF RUN OUT
CAIE C," "
CAIN C,11
JRST RSCAN0 ;IGNORE LEADING BLANKS AND TABS
MOVE A,[440700,,BUF] ;INITIALIZE BYTE POINTER
IFE BOOKMD, {
CAIE C,"R" ;IN BOOKMD, HAVE TO ACCEPT "READ" SYSTEM COMMAND
};END ¬BOOKMD
CAIN C,"S"
JRST RSCAN3 ;S OR START COMMAND
MOVEI B,-40(C) ;CONVERT CHARACTER TO SIXBIT
PUSHJ P,RSTYI1 ;GET ANOTHER CHARACTER
POPJ P,
IFN BOOKMD, {
CAIN B,'R'
CAIN C,"E"
JRST RSCN0A ;STARTED BY ETV, CETV, OR READ COMMANDS
MOVEI TT,RSCAN3+1 ;R OR RUN COMMAND
JRST RSTYI0
RSCN0A:
};END BOOKMD
SOJLE T,CPOPJ
SUBI C,40 ;CONVERT TO SIXBIT
DPB B,[60600,,C] ;SAVE FIRST SIXBIT CHARACTER.
PUSHJ P,SYSCCK ;CHECK TWO RIGHT ADUSTED SIXBIT CHRS
JRST RSCAN6 ;CEtv, ETv, EDit, CReate, or REad COMMAND
RSCAN1: TLNN T,-1 ;DON'T UNDERSTAND. COMMAND. FLUSH!
INCHRS C ;(IF T>777777 THEN RETURN NOW!
POPJ P,
RSCAN2: SOJG T,RSCAN1 ;read in and ignore rest of faulty command
RSCANX: SETZM SYSCMD
SETZM RSPNT
POPJ P,
;HERE IF SYSTEM START/RUN COMMAND SEEN. READ TO ";" THEN READ FILE NAME.
RSCAN3: JSP TT,RSTYI ;GET NEXT. WE SAW A MONITOR RUN COMMAND
JRST RSCAN2 ;WAS CR
SOJG T,RSCN4D ;WAS ";" READ FILE NAME NEXT
SOJG T,RSCAN3 ;WAS LEGAL, IGNORE IT
POPJ P, ;(RAN OUT OF TEXT)
;HERE TO GOBBLE FILE NAME. STOW IT USING "A" AS A BYTE POINTER
RSCN4D: MOVEM A,RSPNT ;POINTER TO FIRST BYTE OF FILE NAME.
RSCAN4: JSP TT,RSTYI ;GOBBLE TEXT
JRST RSCAN5 ;CR ENDS SCAN
SOJG T,RSCAN8 ;FLUSH AFTER SEMI-COLON
RSCN4B: IDPB C,A ;STOW TEXT
SOJG T,RSCAN4 ;GOBBLE MORE TEXT
JRST RSCANX ;UNEXPECTED END OF DATA, ACT UNHAPPY
;AT RSCN4A TO FLUSH BLANKS AND TABS BEFORE SCANNING NAMES.
RSCN4C: JSP TT,RSTYI
JRST RSCAN5 ;CR SEEN
SOJG T,RSCAN8 ;SEMI-COLON SEEN. FLUSH THE REST. BE HAPPY.
RSCN4A: CAIE C," " ;IGNORE BLANKS AND TABS
CAIN C,11
SOJG T,RSCN4C ;IGNORE BLANKS AND TABS
MOVEM A,RSPNT ;SOME NON-BLANK SEEN
JRST RSCN4B ;SET POINTER AND GOBBLE TEXT
;RSCAN5, RSCAN6, RSCAN7, RSCAN8, SYSCCK, CRECHK
RSCAN5: IDPB C,A ;CR SEEN. STOW IT
INCHRS C ;GET LF
JRST RSCANX
SOJLE T,RSCANX ;VARIOUS WAYS TO BE UNHAPPY
CAIE C,12
JRST RSCANX
IDPB C,A ;STOW LF AND NULL
MOVEI C,
IDPB C,A
TLNN T,-1 ;SKIP IF T>777777 (NOT RESCAN)
SOJG T,RSCAN1 ;IF THERE'S MORE, UNHAPPY
MOVE A,[440700,,BUF]
MOVEM A,TYIPNT ;SET UP POINTER TO TEXT
POPJ P, ;RETURN HAPPY
;HERE WHEN EDIT COMMAND SEEN.
RSCAN6: LSH C,6 ;MOVE COMMAND TO L.ADJ IN RIGHT HALF
HRLZM C,SYSCMD ;SAVE 6BIT COMMAND LEFT ADJUSTED
RSCAN7: JSP TT,RSTYI ;GOBBLE
JRST RSCAN5 ;END OF TEXT. ACT HAPPY. (E.G., "ET<CR>")
SOJG T,RSCAN8 ;SEMICOLON MEANS COMMENT HERE
CAIL C,"A"
CAILE C,"Z"
JRST RSCN4A ;SOME NON-LETTER SEEN. GOBBLE FILE NAME
SOJG T,RSCAN7 ;FLUSH UNTIL A DELIMITER SEEN
JRST RSCANX
;FLUSH INPUT THROUGH CR. ";" SEEN AFTER FILE NAME SCAN BEGAN.
RSCAN8: JSP TT,RSTYI
JRST RSCAN5 ;CR SEEN. BE HAPPY
SOJG T,RSCAN8
SOJG T,RSCAN8
JRST RSCANX
SYSCCK: CAIE C,'ET'
CAIN C,'ED'
POPJ P,
IFN BOOKMD, {
CAIN C,'RE'
POPJ P,
};END BOOKMD
CRECHK: CAIE C,'CE'
CAIN C,'CR'
POPJ P,
JRST POPJ1
;RSTYI, TYI1, TYI2, TYI3, TYIX, TYI4
;READ TTY. RETURN CHARACTER IN C.
;RETURN +1 ON CR, +2 ON ";" AND +3 ON OTHERS,
; EXCEPT, NO DATA RETURNS TO RSCANX, ILLEGAL CHAR RETURNS TO RSCAN2
RSTYI: PUSHJ P,RSTYI1
JRST RSCANX
IFN BOOKMD, {
RSTYI0:
};END BOOKMD
CAIN C,15
JRST (TT)
CAIN C,";"
JRST 1(TT)
CAIN C,11
JRST 2(TT)
CAIE C,"→"
CAIN C,"↓"
JRST 2(TT)
CAIL C,40
TRNE C,600
JRST RSCAN2
JRST 2(TT)
;READ TTY, SKIP RETURN UPPER CASE ONLY IN "C".
RSTYI1: INCHRS C
POPJ P,
AOS (P)
UCASE: CAIGE C,"a"
POPJ P,
CAIG C,"z"
SUBI C,"a"-"A"
POPJ P,
TYI1: SKIPE C,TYICHR#
JRST TYI3
SKIPE TYIPNT
JRST TYI4
TYI2: INCHWL C
CAIE C,15
JRST TYIX
INCHWL C
TRCA C,15≠12
TYI3: SETZM TYICHR
TYIX: MOVEM C,TYISV#
POPJ P,
TYI4: ILDB C,TYIPNT
JUMPN C,TYIX
SETZM TYIPNT
SKIPN TYIINS#
JRST TYIX
XCT TYIINS
SETZM TYIINS
JRST TYIX
;TYI, TYIT, TYIU
TYI: PUSHJ P,TYI1
TYIT: TRNE C,600
POPJ P,
HLL T,CTAB(C)
TLNN T,LSPC!NSPEC
JRST POPJ1
JUMPE C,TYI
PUSH P,T
MOVN T,CTAB(C)
HRLI T,400000
LSH T,(T)
TLNN T,744000
AOS -1(P)
POP P,T
POPJ P,
TYIU: PUSHJ P,TYI
POPJ P,
TLNE T,LETF
TLNN T,LT2F
JRST POPJ1
SUBI C,40
JRST POPJ1
;TMPRED, TMPRD1, TMPRD2, TMPRDX, RPGRD1, BKPRED
TMPMAX←←37
;TCBUF←←BUF2
TMPRED: MOVE T,[1,,['ED '↔-TMPMAX,,TCBUF-1]]
IFN BOOKMD, {
SKIPE BOOKSW ;use different tmpcor filename in /B mode
MOVE T,[1,,['BK '↔-TMPMAX,,TCBUF-1]]
};END BOOKMD
TMPCOR T, ;SEEK TMPCOR FILE
JRST RPGRED ;NONE. TRY TO READ QQSVED.RPG
TMPRDY: JUMPLE T,CPOPJ ;NO DATA?
CAILE T,TMPMAX ;OVERFLOW?
POPJ P, ;YES. THAT'S TOO MUCH WORK.
SETZM TCBUF(T) ;MAKE SURE WE STOP.
MOVE T,[440700,,TCBUF]
TMPRD1: MOVE G,T ;G←POINTER TO BYTE BEFORE THE FIRST REAL CHARACTER.
ILDB C,T ;GET A CHARACTER
CAILE C,40 ;DELIM?
JRST TMPRD2 ;NO. REAL.
JUMPN C,TMPRD1 ;LOOP UNTIL A REAL CHARACTER IS SEEN.
POPJ P, ;BUT IF THERE AREN'T ANY, WE QUIT
TMPRD2: ILDB C,T ;NOW, WE SKIP UNTIL WE SEE SOME REAL STUFF.
CAIG C,40 ;REAL CHARACTER?
JRST TMPRDX ;NO. WE HAVE SKIPPED THE ET OR CET PART.
JUMPN C,TMPRD2 ;WHILE WE'RE STILL IN BUSINESS...
POPJ P, ;OOPS.
TMPRDX: MOVEM T,TYIPNT ;THIS POINTS TO THE ARGUMENT PORTION.
MOVEM T,TCPNT ;(G POINTS TO THE COMMAND NAME)
JRST POPJ1 ;INDICATES WE WON.
RPGRED: MOVE T,[['DSK '↔'QQSVED'↔'RPG '↔0↔0],,LKUP-1]
IFN BOOKMD, {
SKIPE BOOKSW ;LOOK FOR DIFFERENT RPG FILE IN /B MODE
MOVE T,[['DSK '↔'QQBKP '↔'RPG '↔0↔0],,LKUP-1]
};END BOOKMD
MOVEI C,DSKI
PUSHJ P,OPNDEV ;NOTE THAT OPNDEV SKIPS ON FAILURE
LOOKUP DSKI,LKUP
JRST RELDEV
IFN BOOKMD, {
RPGRD1: ;BKPRED (SEE BELOW) ENTERS HERE TO READ .BKP FILE
};END BOOKMD
INPUT DSKI,[-TMPMAX,,TCBUF-1↔0]
PUSHJ P,RELDEV
MOVS T,LKUP+3
MOVN T,T ;SET UP POSITIVE WORD COUNT
JRST TMPRDY
IFN BOOKMD, {
BKPRED:
TLNN D,740 ;FILENAME SPECIFIED?
JRST BKPRD0 ;NO, LOOK FOR .BKP FILE
SKIPG SLINE ;YES. /#L OR /#P SPECIFIED?
SKIPLE SPAGE ;
JRST BKPRD1 ;YES. IGNORE .BKP FILE
SKIPE RDONLY ;/R SPECIFIED?
JRST BKPRD1 ;YES. IGNORE .BKP FILE
BKPRD0: MOVE T,[['DSK '↔0↔'BKP '↔0↔0],,LKUP-1]
MOVEI C,DSKI
PUSHJ P,OPNDEV
SKIPN T,EDFIL ;LOOK FOR .BKP FILE WITH SAME FIRST NAME AS BOOK FILE
JRST BKPRD2 ;RELEASE DSK. (SHOULD NEVER BE HERE)
MOVEM T,LKUP ;USE EDIT FILE'S NAME FOR .BKP FILE
MOVE T,EDFIL+3 ;PICK UP PPN FROM COMMAND
JSP TT,BKPLKP ;LOOKUP .BKP FILE ON PPN GIVEN IN COMMAND
MOVE T,PPN ;NOT FOUND. TRY AGAIN ON USER'S CURRENT AREA
JSP TT,BKPLKP
MOVE T,RPPN ;NOT FOUND. TRY AGAIN ON USER'S LOGGED IN PPN
JSP TT,BKPLKP
JRST BKPRD2 ;NOT FOUND THERE EITHER
BKPLKP: MOVEM T,BKPPPN# ;SAVE PPN OF .BKP FILE
MOVEM T,LKUP+3
LOOKUP DSKI,LKUP
JRST (TT) ;DIRECT RETURN ON FAILURE
PUSHJ P,RPGRD1 ;READ IN FILE AND SCAN PAST "ET" PART. RELEASE DSK.
JRST BKPRD1 ;ILLEGAL FORMAT, IGNORE .BKP FILE
MOVEI D,EDFIL2
PUSHJ P,FRD ;GET FILENAME FROM .BKP FILE
JRST BKPRD1 ;ILLEGAL FORMAT, IGNORE .BKP FILE
MOVE T,BKPPPN ;GET PPN OF .BKP FILE
TLNN D,600 ;DID .BKP FILE SPECIFY A PPN?
MOVEM T,EDFIL2+3 ;NO. USE .BKP FILE'S PPN FOR ACTUAL BOOK FILE
MOVE T,[EDFIL2-1,,EDFIL-1]
BLT T,EDFIL+5 ;NO. MAKE FILENAME FROM .BKP FILE THE FILE TO EDIT
; HLLOS NEWBKP ;SET FLAG INDICATING USE OF .BKP FILE
POPJ P,
BKPRD2: PUSHJ P,RELDEV ;NO .BKP FILE FOUND
SETZM BKPPPN
TLNE D,740 ;WAS A FILENAME SPECIFIED?
SETOM NEWBKP# ;YES, FLAG TO TELL USER WE WILL CREATE A .BKP FILE
TLNN D,740 ;WAS A FILENAME SPECIFIED?
BKPRD1: SETZM BKPSW ;NO. DON'T WRITE .BKP FILE
POPJ P,
};END BOOKMD
;TMPWRT, BKPWRT
TMPWRT: SKIPN SYSCMD
POPJ P,
SETZM TCBUF
MOVE T,[TCBUF,,TCBUF+1]
BLT T,TCBUF+TMPMAX-1
MOVE T,[440700,,TCBUF]
MOVEM T,TYOPNT
TYPCHR "ET"
TYPCHR " "
MOVEI D,EDFIL
PUSHJ P,FILSTR
SKIPE PAGE
TDZA T,T
MOVEI T,1
PUSH P,TYOPNT
TYPCHR "("
IFN BOOKMD, {
SKIPE BOOKSW
TYPCHR "B"
};END BOOKMD
SKIPE RDONLY
TYPCHR "R"
XCT (T)[SKIPN DIRPAG↔SKIPE EDFIL+4]
TYPCHR "N"
XCT (T)[SKIPA TT,CURPAG↔SKIPGE TT,SPAGE]
JRST .+3
TYPDEC TT
TYPCHR "P"
XCT (T)[SKIPA TT,ARRL↔SKIPGE TT,SLINE]
JRST .+3
TYPDEC TT
TYPCHR "L"
LDB T,TYOPNT
TYPCHR ")"
POP P,TT
CAIN T,"("
MOVEM TT,TYOPNT
TYPCHR "
"
MOVE T,TYOPNT
IFN BOOKMD, {
SETZ C, ;MAKE SURE LOSING 4 BITS ARE ZERO ANYWAY (DISK DUMP MODE FEATURE)
};END BOOKMD
IFE BOOKMD, {
TDZA C,C
};END ¬BOOKMD
IDPB C,T
TLNE T,760000
JRST .-2
MOVNI TT,-TCBUF+1(T)
MOVSI TT,(TT)
HRRI TT,TCBUF-1
MOVSI T,'ED '
IFN BOOKMD, {
SKIPE BOOKSW ;USE DIFFERENT TMPCOR FILENAME IN /B MODE
MOVSI T,'BK '
};END BOOKMD
MOVE A,[3,,T]
TMPCOR A,
JFCL
POPJ P,
IFN BOOKMD, {
BKPWRT: PUSH P,TT ;SAVE DUMP MODE OUTPUT COMMAND
MOVE T,[['DSK '↔0↔'BKP '↔0↔0],,ENTR-1]
MOVEI C,RPGO
PUSHJ P,OPNDEV
JRST BKPWR2 ;DSK OPENED
BKPWR1: SUB P,[1,,1] ;CANT OPEN DISK OR CANT ENTER .BKP FILE
JRST RELDEV
BKPWR2: MOVE T,EDFIL ;PICK UP PRIMARY NAME OF FILE BEING EDITED
MOVEM T,ENTR ;AND USE IT FOR .BKP FILE'S PRIMARY NAME
MOVE T,BKPPPN ;REMEMBER WHAT DISK AREA THE .BKP FILE IS TO BE ON
MOVEM T,ENTR+3
ENTER RPGO,ENTR ;MAKE <FILENM>.BKP FILE
JRST BKPWR1
POP P,T ;RETRIEVE DUMP MODE COMMAND
SETZ TT,
OUTPUT RPGO,T
MOVE T,CURPAG
CAME T,PAGES ;ARE WE ON THE LAST PAGE OF THE BOOK?
JRST RELDEV ;NO
CLOSE RPGO, ;YES, DELETE .BKP FILE
SETZM ENTR
MOVE T,BKPPPN
MOVEM T,ENTR+3
RENAME RPGO,ENTR ;HIE THEE AWAY
JFCL
JRST RELDEV
};END BOOKMD
;FILERR, FILTYP, FILSTR, PPNTYP, FILETB
FILERR: HRRE T,1(D)
CAIGE T,NFLERS
SKIPA TT,FILETB(T)
MOVEI TT,[ASCIZ \UNRECOGNIZED LOOKUP/ENTER ERROR: \]
OUTSTR (TT)
SETZM TYOPNT
MOVE A,-1(D)
HLRZ T,TT
JUMPN T,(T)
FILTYP: SETZM TYOPNT
FILSTR: MOVE A,-1(D)
CAMN A,['DSK ']
JRST .+3
PUSHJ P,SIXTYO
TYPCHR ":"
MOVE A,(D)
PUSHJ P,SIXTYO
HLLZ A,1(D)
JUMPE A,PPNTYP
TYPCHR "."
PUSHJ P,SIXTYO
PPNTYP: SKIPE A,3(D)
CAMN A,PPN
POPJ P,
TYPCHR "["
HLLZS A
PUSHJ P,PNTYO
TYPCHR ","
HRLZ A,3(D)
PUSHJ P,PNTYO
TYPCHR "]"
POPJ P,
[ASCIZ /DEVICE NOT DISK: /]
SIXTYO,,[ASCIZ /DEVICE CAN'T BE OPENED: /]
FILETB: [ASCIZ /FILE NOT FOUND: /]
PPNTYP,,[ASCIZ /USER NOT FOUND: /]
[ASCIZ /PROTECTION FAILURE: /]
[ASCIZ /FILE IN USE: /]
NFLERS←←.-FILETB
;SIXTYO, SIXTYL, SIXTY2, SIXTYN, SIXTNL, SIXTNN, PNTYO, PNTYOL
SIXTYO: MOVE B,[440600,,A]
SIXTYL: ILDB C,B
JUMPE C,SIXTYN
SIXTY2: TYPCHR 40(C)
TLNE B,770000
JRST SIXTYL
POPJ P,
SIXTYN: MOVEI T,1
SIXTNL: TLNN B,770000
POPJ P,
ILDB C,B
JUMPN C,SIXTNN
AOJA T,SIXTNL
SIXTNN: TYPCHR "_"
SOJG T,.-1
JRST SIXTY2
PNTYO: JUMPE A,CPOPJ
MOVE B,[440600,,A]
ILDB C,B
JUMPE C,.-1
PNTYOL: JUMPN C,.+2
MOVEI C,"_"-40
TYPCHR 40(C)
TLNN B,500000
POPJ P,
ILDB C,B
JRST PNTYOL
;UUOH, UUODSP, UFCE, UTYPCH, UTYPC2, UTYPDE, UTYPOC
UUOH: PUSH P,T
LDB T,[331100,,40]
CAIG T,NUUOS
SKIPGE T,UUODSP(T)
JRST 4,.
EXCH T,(P)
POPJ P,
UUODSP: -1
UUOS{,U!X
}
UFCE: HRRZ T,40
CAIN T,T
SKIPA T,-1(P)
MOVE T,(T)
POPJ P,
UTYPCH: EXCH T,40
ROT T,-7
TRNE T,177
PUSHJ P,UTYPC2
ROT T,7
PUSHJ P,UTYPC2
MOVE T,40
POPJ P,
UTYPC2: SKIPN TYOPNT
OUTCHR T
SKIPE TYOPNT
IDPB T,TYOPNT#
POPJ P,
UTYPDE: PUSHJ P,UTYPR
POPJ P,12
UTYPOC: PUSHJ P,UTYPR
POPJ P,10
FOOZ←<XTTYUU> ↔ GOOZ←<TTYUUO>
UXTTYU: PUSH P,A ;All TTYUUO's (INCHRW, etc.) now come here...
MOVSI A,(<GOOZ≠FOOZ>) ;Change it to a real TTYUUO
MACTYX: XORB A,40
JRST MACTYI
HOOZ←<SNEAKW> ↔ IOOZ←<CALLI 400063>
USNEAK: PUSH P,A ;SNEAKW now comes here.
MOVE A,[HOOZ≠IOOZ]
XORB A,40
LDB A,[POINT 4,A,12]
JRST MACTYI
;UTYPR, UTYPR1, USORRY, UFATAL
UTYPR: PUSH P,T
HRRZ T,@-1(P)
MOVEM T,RADIX#
PUSHJ P,UFCE
PUSHJ P,UTYPR1
POP P,T
POPJ P,
UTYPR1: PUSH P,TT
IDIV T,RADIX
JUMPE T,.+2
PUSHJ P,UTYPR1
MOVEI T,"0"(TT)
PUSHJ P,UTYPC2
POP P,TT
POPJ P,
USORRY: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR @40
OUTSTR [ASCIZ /
/]
POPJ P,
UFATAL: PPSEL
OUTSTR [ASCIZ /
FATAL ERROR -- /]
OUTSTR @40
OUTSTR [ASCIZ /
/]
JRST 4,UFATAL
;OPENI, OPNOI, IOPEN, SETI, SETRLD, OPNDEV, RELDEV, OPNLUZ
OPENI: TLZ F,ENTRD
SKIPA C,[DSKI]
OPNOI: MOVEI C,DSKO
DPB C,[270400,,%LKUP]
DPB C,[270400,,%IN]
DPB C,[270400,,%SETI]
DPB C,[270400,,%STAT]
MOVEM C,ICHN#
MOVEI T,(C)
XORI T,DSKI≠DSKO
DPB T,[270400,,%RELS]
XCT %RELS
SETZM JOBJDA(T)
IOPEN: MOVSI T,-1(D)
HRRI T,LKUP-1
PUSHJ P,OPNDEV
XCT %LKUP
POPJ P,
SETZM IBLK
MOVS T,LKUP+3
MOVNM T,FILWC#
ASH T,-7
MOVNM T,FILLEN#
HLLZ T,LKUP+2
TLZ T,37
IOR T,DATBLK
MOVEM T,2(D)
HRRZ T,LKUP+1
HRRM T,1(D)
AOS (P)
SETI: TRZ F,EOF
MOVE T,IBLK
CAIN T,-1(A)
JRST SETI2
HRRZM A,IBLK#
SOS IBLK
XCT %SETI
SETI2: HLLZ T,A
ROT T,7
ADD T,IBFPNT
MOVEM T,NEWPNT#
SETRLD: MOVE T,[440700,,IBFE]
HRRZM T,ABFEND ;SET UP ADDRESS OF THE END OF THE BUFFER.
MOVEM T,INPNT#
POPJ P,
IMPURE
%OPEN: OPEN OPNBLK
%RELS: RELEAS
%LKUP: LOOKUP LKUP
%IN: IN [-200,,IBUF-1↔0]
%SETI: USETI (A)
%STAT: GETSTS C
%CSTAT: CHNSTS TT
OPNBLK: 17↔0↔0
IBFPNT: 10700,,IBUF-1
0
LKUP: BLOCK 4
PURE
OPNDEV: MOVE TT,T
BLT TT,3+1(T)
CAMLE C,JOBHCU↑
JRST .+3
SKIPGE JOBJDA↑(C)
POPJ P,
DPB C,[270400,,%CSTAT]
XCT %CSTAT
TRNE TT,400000
POPJ P,
DPB C,[270400,,%OPEN]
MOVE TT,(T)
MOVEM TT,OPNBLK+1
XCT %OPEN
JRST [HLLOS 1+1(T)↔JRST POPJ1]
MOVEI TT,(C)
DEVCHR TT,
TLNE TT,DVDSK
POPJ P,
MOVEI TT,-2
HRRM TT,1+1(T)
AOS (P)
RELDEV: DPB C,[270400,,%RELS]
XCT %RELS
SETZM JOBJDA(C)
POPJ P,
OPNLUZ: PUSH P,A
MOVEI D,LKUP
PUSHJ P,FPAUSE
OUTSTR [ASCIZ /LOOKUP./]
MOVSI D,EDFIL
POP P,A
SOS (P)
JRST IOPEN
;RLD, RLD1, RLD2, RLDX, RLDLUZ, FIXEOF, ENTLUZ, ENTL2
;HERE IF WE FOUND A RUBOUT IN THE INPUT FILE.
;USUALLY THIS MEANS WE'RE AT END OF RECORD, BUT IT MAY HAVE BEEN
;A RUBOUT FROM THE FILE ITSELF.
;CALLING SEQUENCE IS:
; ILDB C,BADR
; SKIPG CTAB(C)
; XCT @CTAB(C) ;SUBJECT INSTRUCTION IS: PUSHJ P,RLD
RLD: MOVE C,(P) ;CALLER'S ADDRESS.
HRRZ C,@-3(C) ;ADDRESS PART OF BYTE POINTER
CAME C,ABFEND# ;IS THIS THE LAST WORD OF THE BUFFER?
JRST [POP P,C↔JRST -3(C)] ;NO. WAS R-O FROM FILE. RETURN AND IGNORE.
XCT %IN ;TIME TO READ MORE. (IN UUO)
RLD1: AOSA C,IBLK ;COUNT A BLOCK READ
JRST RLDLUZ ;HERE WE HAVE EOF OR ERROR (IN UUO SKIPPED)
CAMN C,TSTBLK#
PUSHJ P,@TSTSET#
RLD2: MOVE C,IBFPNT
EXCH C,NEWPNT ;FANCY NEW POINTER WILL NEXT TIME BE NORMAL
RLDX: EXCH C,(P) ;STORE POINTER SO
POP P,@-3(C) ;THE POP CLOBBERS THROUGH THE ILDB
JRST -3(C) ;RETURN TO THE ILDB
RLDLUZ: XCT %STAT ;GET STATUS (INTO C)
TRNN C,20000 ;EOF?
JRST 4,. ;NO. BARF. SOME REAL ERROR
MOVE C,IBLK ;GET THE NUMBER OF SUCCESSFULLY READ BLOCKS
LSH C,7 ;LAST SUCCESSFULLY READ WORD
CAMGE C,FILWC ;BIGGER THAN FILE WORD COUNT?
JRST FIXEOF ;NO. WE HAVE JUST READ A PARTIAL BUFFER.
TROE F,EOF ;SET FLAG FOR EOF
JRST RLD2 ;WE WERE THROUGH HERE BEFORE.
MOVE C,[BYTE (7)14] ;PUT FF WHERE WE'LL SEE IT
MOVEM C,IBUF
MOVEI C,1 ;NOW ARRANGE FOR SOME RUB OUTS
JRST FIXEF1
FIXEOF: SUB C,FILWC
MOVN C,C
FIXEF1: PUSH P,IBFE
POP P,IBUF(C)
MOVEI C,IBUF(C)
MOVEM C,ABFEND ;SET END OF BUFFER'S ADDRESS
JRST RLD1
ENTLUZ: PUSH P,A
PUSH P,D
MOVEI D,ENTR
PUSHJ P,FPAUSE
OUTSTR [ASCIZ /ENTER./]
MOVEI C,DSKO
PUSHJ P,RELDEV ;STUPID SYSTEM!
LDB T,[270400,,%LKUP]
CAIE T,DSKO
JRST ENTL2
MOVE A,IBLK
MOVEI D,EDFIL
PUSHJ P,IOPEN
PUSHJ P,OPNLUZ
ENTL2: POP P,D
POP P,A
MOVEI E,EDFIL
JRST OPENO
;EXTCHK, EXTCH1, EXTCH2, EXTCH3, EXTCH4, EXTTAB
EXTCHK: HRRZ T,LKUP+1
JUMPN T,POPJ1
MOVE T,@SRCFIL+3
MOVEM T,OBUF
MOVSI T,'UFD'
MOVEM T,OBUF+1
MOVE T,['1 1']
MOVEM T,OBUF+3
MOVE T,SRCFIL
TLNN T,100
LOOKUP DSKI,OBUF
JRST POPJ1
MOVNS T,OBUF+3
MOVE B,@SRCFIL
MOVEI C,-1
EXTCH1: MOVN T,OBUF+3
JUMPGE T,EXTCH4
CAMGE T,[-200,,]
MOVSI T,-200
ADDM T,OBUF+3
HRRI T,IBUF-1
MOVE A,T
MOVEI TT,
INPUT DSKI,T
EXTCH2: CAME B,1(A)
JRST EXTCH3
HLRZ T,2(A)
MOVSI TT,-NEXTS
CAIE T,@EXTTAB(TT)
AOBJN TT,.-1
CAILE C,(TT)
SKIPGE EXTTAB(TT)
JRST EXTCH3
MOVEI C,(TT)
HRLZM T,@SRCFIL+1
EXTCH3: ADD A,[4,,4]
JUMPL A,EXTCH2
JRST EXTCH1
EXTCH4: CAIL C,-1
AOS (P)
MOVSI T,400000
HLLM T,SRCFIL+1
POPJ P,
EXTTAB: FOR X IN(FAI,SAI,F4,PUB,MAC,WRU,NSA,OSA,LST,CMD,TXT,RELX,<DMPX>
,XGPX,DRWX,WD X,PC X,WPCX,PLTX,PCPX,PLXX,WL X,WLSX)
{ (<SIXBIT /X/>)
}NEXTS←←.-EXTTAB
0
;OPENW, OPENO, SETO, FPAUSE, PAUSE, PAUS2
OPENW: TRNN F,REDNLY
TLOE F,ENTRD
JRST OPENO2
LDB TT,[270400,,%LKUP]
CAIE TT,DSKO ;ONLY DO RENAME IN ALTER MODE
JRST OPENO
PUSHJ P,OPENO
MOVE T,3(E)
MOVEM T,ENTR+3
MOVE T,DATBLK
DPB T,[2700,,ENTR+2]
RENAME DSKO,ENTR
OUTSTR [ASCIZ /RENAME TO SET WRITTEN TIME FAILED.
/]
POPJ P,
OPENO: MOVSI T,-1(E)
HRRI T,ENTR-1
MOVEI C,DSKO
PUSHJ P,OPNDEV
ENTER DSKO,ENTR
JRST ENTLUZ
SETZM OBLK#
OPENO2: PUSHJ P,WRBF1
MOVE T,[OBUF-1,,OBUF]
TLNN F,CLRBF ;ALREADY DONE?
BLT T,OBUF+177
POPJ P,
SETO: HRRZM A,OBLK
USETO DSKO,(A)
JRST WRBF2
FPAUSE: HRRE T,1(D)
JUMPGE T,PAUSE
PUSHJ P,PAUSE
OUTSTR [ASCIZ /OPEN./]
POPJ P,
PAUSE: SKIPN DPY
JRST PAUS2
PUSH P,G
PUSH P,SCRSIZ
PUSHJ P,FINI2
POP P,SCRSIZ
POP P,G
PPACT 200000
PTWR1W [0↔10000+"N"] ;ONLY WAY TO NORMALIZE PP
PAUS2: SETZM TYOPNT
TYPCHR 15*200+12
PUSHJ P,FILERR
OUTSTR [ASCIZ /
CONTINUE TO RETRY /]
XCT @(P)
EXIT 1,
JRST POPJ1
;CLOSO, WRBUF, WRBF1, WRBF2, ENTR, OBUF
CLOSO: MOVE D,OPNT
CAMN D,[700,,OBUF-1]
POPJ P,
TDZA T,T
IDPB T,D
TLNE D,760000
JRST .-2
HRLI D,1(D)
ADDI D,2
CAMG D,[OBUF+177,,OBUF+200]
SETZM -1(D)
CAMGE D,[OBUF+177,,OBUF+200]
BLT D,OBUF+177
WRBUF: OUT DSKO,[-200,,OBUF-1↔0]
WRBF1: AOSA OBLK
JRST 4,.
WRBF2: PUSH P,T
MOVEI T,200*5
MOVEM T,OCNT#
MOVE T,[700,,OBUF-1]
MOVEM T,OPNT#
MOVE T,[OBUF-1,,OBUF]
TLNE F,CLRBF
BLT T,OBUF+177
POP P,T
POPJ P,
IMPURE
0
ENTR: BLOCK 4
0 ;FOR BLT
OBUF: BLOCK 200
IBUF: BLOCK 200
IBFE: -2
PURE
;MORCOR, INTLUZ, INTDSP, PDLOV, PDLOV1, PDLOV2, PDLOV3, ISAV
TSINT: MOVEM T,ISAV ;HERE FOR INTERRUPT (OLD DEC STYLE)
MOVEM TT,ISAV+1 ;SAVE SOME AC'S
MOVE T,JOBCNI ;THIS IS THE REASON WE'RE HERE
JFFO T,.+1 ;CONVERT BIT NUMBER TO INDEX (WHOOPEE!)
CAIL TT,MININT ;IN RANGE?
CAILE TT,MAXINT
INTLUZ: JRST 4,. ;UNEXPECTED TYPE OF INTERRUPT
JRST 2,@INTDSP-MININT(TT) ;DISPATCH TO PARTICULAR INTERRUPT SERVER
INTDSP: PDLOV
INTLUZ
INTLUZ
MORCOR
MAXINT←←.-INTDSP+MININT
IFND: MOVEM TT,IFRET#
IFND1: CAIL T,BEG
CAMLE T,JOBREL
JRST IFND3
IFND2: MOVE T,(T)
MOVEM T,INTINS#
MOVE T,ISAV
MOVE TT,ISAV+1
MOVEI T,@INTINS
HLRZ TT,INTINS
ANDI TT,777000
CAIN TT,(<XCT>)
JRST IFND1
LDB TT,[270400,,INTINS]
CAIE TT,T
CAIN TT,TT
ADDI TT,ISAV-T
MOVEM TT,IFACP#
HLRZ TT,INTINS
ANDI TT,¬37
AOS IFRET
JRST @IFRET
IFND3: CAMLE T,JOBHRL↑
JRST @IFRET
JRST IFND2
PDLOV: SKIPE SFSPNT
JSP SBARF
TLNN P,-1
CAMLE P,JOBREL
JRST TRYPSH
HLRZ T,(P)
ANDI T,357637
CAIE T,310000
CAIN T,10000
JRST PDLOV2
TRYPSH: SOS T,JOBTPC
JSP TT,IFND
JRST PDLUNK
ANDI TT,777000
CAIE TT,(<PUSH>)
PDLUNK: JRST 4,.
MOVE T,@IFACP
HLRZ T,(T)
JUMPN T,PDLUNK
MOVN TT,[1,,1]
ADDM TT,@IFACP
JRST INTERR
PDLOV2: SUB P,[1,,1]
HRRZ T,1(P)
SUBI T,1
JSP TT,IFND
AOBJP P,TRYPSH
CAIN TT,(<PUSHJ P,>)
CAIE T,@JOBTPC
AOBJP P,TRYPSH
SOS T,1(P)
MOVEM T,JOBTPC
JRST INTERR
IMPURE
ISAV: BLOCK 3
PURE
;FSINI, FSINI1, MORCOR
FSINI: MOVE T,JOBREL
CAMLE T,JOBFF
JRST FSINI1
ADDI T,2000
CORE T,
JRST 4,.
MOVE T,JOBREL
FSINI1: AOJ T,
MOVEM T,FSMAX#
SUB T,JOBFF
HRROM T,@JOBREL
HRROM T,@JOBFF
MOVEM T,FSFREE#
MOVE T,JOBFF
MOVEM T,FSMIN#
MOVEM T,FSBEG#
SETZM FSUSE#
POPJ P,
MORCOR: HRRZ T,JOBTPC ;HERE FOR ILL MEM REF
MOVSI TT,-LEGCNT
CAME T,LEGTAB(TT) ;IS INTERRUPT PC= TO ONE OF LEGAL VALUES?
AOBJN TT,.-1
JUMPGE TT,INTERR ;JUMP IF NOT A MEMBER OF LEGTAB
MOVE T,JOBREL ;LET'S GET MORE CORE.
ADDI T,2000
CAILE T,377777 ;MAKE SURE WE DON'T GET TOO BLOATED
JRST [OUTSTR [ASCIZ/I JUST GOT TOO BLOATED.
/]
HALT MORCOR]
CORE T,
JRST 4,. ;(BARF)
;REG 1/1/74 TO FIX AC OF PUSH THAT GOT ILM
LDB T,[POINT 9,@JOBTPC,8] ;GET OP CODE
CAIE T,(<PUSH>⊗-9) ;IS THIS A PUSH?
JRST INTX ;NO. EXIT NOW.
MOVE T,@JOBTPC ;GET LOSING PUSH.
HRRI T,ISAV ;CHANGE ADDRESS PART TO CLOBBER USELESS CELL
TLC T,(<PUSH>≠<POP>) ;CHANGE PUSH TO A POP
MOVEM T,ISAV+2 ;SAVE IT WHERE WE'LL XCT IT.
MOVE T,ISAV
MOVE TT,ISAV+1
XCT ISAV+2 ;RESTORE T AND TT, THEN FIX THE PUSH AC
JRST 2,@JOBTPC
INTX: MOVE T,ISAV
MOVE TT,ISAV+1
JRST 2,@JOBTPC
INTERR: MOVE T,JOBENB↑
MOVEI TT,
APRENB TT,
SLEEP TT,
MOVEM T,JOBENB
JRST INTX
;FSGET, FSLUP0, FSLUP, FSGRAB, FSXIT
FSGET: TSTSHF
MOVEI T,2(B)
CAMLE T,FSFREE
SOJA T,FSNEW
MOVEI TT,
MOVE A,FSBEG
FSLUP0: SKIPL T,(A)
JRST FSUSED
FSLUP: SKIPL T,(A)
JRST FSNEXT
CAIG B,-2(T)
TRNN T,-2
JRST FSTSML
FSGRAB: HRRZ TT,T
ADDI T,(A)
CAIN B,-2(TT)
JRST FSXIT
SUBI TT,2(B)
HRROM TT,-1(T)
SUBI T,(TT)
HRROM TT,(T)
MOVEI TT,2(B)
FSXIT: CAMN A,FSBEG
HRRZM T,FSBEG
MOVEM TT,-1(T)
MOVEM TT,(A)
ADDM TT,FSUSE
MOVNS TT
ADDM TT,FSFREE
AOJA A,CPOPJ
;FSNEWT, FSNEWP, FSNEW
FSNEWT: MOVEI T,1(B)
FSNEWP: POP P,D
POP P,C
FSNEW: MOVE TT,FSMAX
SKIPGE -1(TT)
SUB TT,-1(TT)
ADDI T,(TT)
CAMLE T,JOBREL
CALLI T,11
JRST 4,.
MOVE A,FSMAX
SKIPGE T,-1(A)
SUBI A,(T)
MOVE T,JOBREL
AOJ T,
MOVE TT,T
SUB TT,FSMAX
ADDM TT,FSMAX
ADDM TT,FSFREE
SUBI T,(A)
HRROM T,(A)
HRROM T,@JOBREL
JRST FSGRAB
;FSUSED, FSTSML, FSNEXT, FSHRET, FSLLUZ
FSUSED: ADDI A,(T)
MOVEM A,FSBEG
JRST FSLUP0
FSTSML: CAIL TT,(T)
JRST FSNEXT
HRRZ TT,T
MOVEM A,FSBIG#
FSNEXT: ADDI A,(T)
CAMGE A,FSMAX
JRST FSLUP
JUMPE TT,[JRST 4,.]
MOVEI T,40(B)
TLNN F,NOSHUF
CAMLE T,FSFREE
SOJA T,FSNEW
PUSH P,C
PUSH P,D
SUBI TT,2(B)
MOVE A,FSBIG
PUSHJ P,FSLSCN
JRST FSLLUZ
MOVEI T,2(B)
LSHC C,-2
CAML C,T
SOJA T,FSNEWP
LSHC C,2
PUSHJ P,FSLSHF
FSHRET: POP P,D
POP P,C
JRST FSGRAB
FSLLUZ: MOVEI T,100(B)
CAMLE T,FSFREE
SOJA T,FSNEWP
PUSHJ P,FSLSHF
MOVNI TT,2(B)
PUSHJ P,FSHSCN
JRST FSNEWT ;NO CAN DO - SOMETHING MUST BE LOCKED
MOVEI T,2(B)
LSH C,-1
CAML C,T
SOJA T,FSNEWP
PUSHJ P,FSHSHF
JRST FSHRET
;FSLSCN, FSLSCL, FSLFR, FSLSHF, FSLSLP, FSLMOV, FSLDON
FSLSCN: MOVEI C,
FSLSCL: CAMGE A,FSBEG
POPJ P,
MOVE T,-1(A)
SUBI A,(T)
SKIPGE T,(A)
JRST FSLFR
TLNE T,LOKBIT
JRST [ADDI A,(T)↔POPJ P,] ;CAN'T MOVE IT
ADDI C,(T)
JRST FSLSCL
FSLFR: ADDI TT,(T)
JUMPL TT,FSLSCL
JRST POPJ1
FSLSHF: CAMG A,FSBEG
ADDM C,FSBEG
MOVEI C,
FSLSLP: CAML A,FSBIG
JRST FSLDON
SKIPL T,(A)
JRST FSLMOV
SUBI C,(T)
ADDI A,(T)
JRST FSLSLP
FSLMOV: HRRZS T
PUSHJ P,PNTREL
PUSHJ P,FSBLT
ADDI A,(T)
JRST FSLSLP
FSLDON: CAML A,FSMAX
TDZA T,T
HRRZ T,(A)
MOVE TT,T
ADDI TT,-1(A)
SUB T,C
HRROM T,(TT)
ADD A,C
HRROM T,(A)
POPJ P,
;FSHSCN, FSHSCL, FSHFR, FSHSHF, FSHSLP, FSHSR, FSHMOV
FSHSCN: MOVEI C,
FSHSCL: SKIPGE T,(A)
JRST FSHFR
TLNE T,LOKBIT
JRST [HRRZ T,-1(A)↔SUBI A,(T)↔POPJ P,] ;CAN'T MOVE
ADDI C,(T)
FSHSC2: ADDI A,(T)
CAMGE A,FSMAX
JRST FSHSCL
POPJ P,
FSHFR: ADDI TT,(T)
JUMPL TT,FSHSC2
JRST POPJ1
FSHSHF: MOVEI C,
FSHSLP: SKIPL T,(A)
JRST FSHMOV
ADDI C,(T)
FSHSR: CAMG A,FSBIG
JRST FSHSX
MOVE T,-1(A)
SUBI A,(T)
JRST FSHSLP
FSHSX: SKIPN T,C
POPJ P, ;JUST IN CASE
ADDI C,-1(A)
HRROM T,(C)
HRROM T,(A)
CAMGE A,FSBEG
MOVEM A,FSBEG
POPJ P,
FSHMOV: ANDI T,-1
PUSHJ P,PNTREL
PUSHJ P,FSBLT
JRST FSHSR
;FSBLT, POPTJ, FSBLT1
;MOVES (T) WORDS LOCATED AT (A) A DISTANCE OF (C). CLOBBERS D & TT
FSBLT: CAILE T,(C)
JUMPGE C,FSBLT1
JUMPLE T,CPOPJ
MOVE TT,A
ADD TT,C
HRL TT,A
PUSH P,T
ADDI T,(TT)
BLT TT,-1(T)
POPTJ: POP P,T
POPJ P,
FSBLT1: CAILE C,5
JRST FSBLT2
JUMPE C,CPOPJ
PUSH P,B
PUSH P,E
MOVSI E,377777(T)
HRRI E,(A)
ADD E,T
MOVSI B,(<POP E,(E)>)
HRRI B,(C)
MOVE C,[JUMPL E,B]
MOVE D,[JRST .+2]
SOJA E,B
HRRZ C,B
POP P,E
POP P,B
POPJ P,
;FSBLT2, FSBLT3, FSHBLT, FSHBL2
FSBLT2: HRRM C,FSHBLT
SOS FSHBLT
HRLS C
MOVE D,A
ADDI D,(C)
PUSH P,T
IDIVI T,(C)
MOVE T,(P)
ADD T,A
HRLS T
ADDI T,(C)
JUMPE TT,FSBLT3
HRRM TT,FSHBL2
SOS FSHBL2
HRLS TT
SUBB T,TT
XCT FSHBL2
FSBLT3: SUB T,C
MOVE TT,T
XCT FSHBLT
CAIGE D,(T)
JRST FSBLT3
HRRZS C
JRST POPTJ
IMPURE
FSHBLT: BLT TT,(T)
FSHBL2: BLT TT,(T)
PURE
;PNTREL, SHFTB, STDSH1, STDSHF, RELOC, RELOCL
PNTREL: CAMN A,FSBLK#
JRST [ ADDM C,FSBLK
ADDM C,FSBL2#
JRST .+1]
HLRZ TT,(A)
CAIL TT,MXSHF
JRST 4,.
MOVE D,A
ADD D,T
HLRZ D,-1(D)
SKIPN C
AOSA (P)
PUSHJ P,@SHFTB(TT)
HRRZ T,(A)
POPJ P,
DEFINE SHFCOD!(X){X!COD←←.-SHFTB X!SHF}
SHFTB: STDSHF
SHFCOD DIR
SHFCOD TXT
MXSHF←←.-SHFTB
STDSH1: HLRZ T,D
PUSHJ P,RELOC
ANDI D,-1
STDSHF: JUMPN D,STDSH1
POPJ P,
LSTSHF: MOVE T,1(A)
LSTSH1: MOVSI C,(C)
PUSHJ P,RELOCL
MOVS T,T
HLRE C,C
RELOC: SKIPA TT,(T)
RELOCL: HLRZ TT,(T)
CAIE A,-1(TT)
JRST 4,.
ADDM C,(T)
POPJ P,
;FSGIVE, FSGIV1, FSGIV2
FSGIVE: CAMGE A,FSMAX
CAMGE A,FSMIN
JRST 4,.
PUSH P,A
PUSH P,B
HRROS TT,-1(A)
SOS B,A
ADDI B,(TT)
HRROS -1(B)
MOVNI TT,(TT)
ADDM TT,FSUSE
MOVN TT,TT
ADDM TT,FSFREE
CAMLE A,FSMIN
SKIPL T,-1(A)
JRST FSGIV1
SUBI A,(T)
ADDI TT,(T)
HRROM TT,(A)
ADDI T,(A)
HRROM TT,-1(B)
FSGIV1: CAMGE B,FSMAX
SKIPL T,(B)
JRST FSGIV2
ADDI TT,(T)
HRROM TT,(A)
ADDI B,(T)
HRROM TT,-1(B)
FSGIV2: CAMGE A,FSBEG
MOVEM A,FSBEG
TLNN F,NOCHK
PUSHJ P,CORCHK
JRST POPBAJ
;CORCHK, CRUNCH, CMPACT
CORCHK: TSTSHF
MOVE TT,FSFREE
TLNN F,NOSHUF
JRST .+4
MOVE T,FSMAX
HRRZ TT,-1(T)
SKIPGE -1(T)
CAIGE TT,2200
POPJ P,
TRZ TT,1777
MOVNS TT
PUSHJ P,CRUNCH
HRRO A,FSMAX
SKIPL T,-1(A)
POPJ P, ;OOPS
SUBI T,200 ;LEAVE THIS MUCH ROOM
SUBB A,T
CALLI T,11
JRST 4,.
MOVE T,JOBREL
AOS TT,T
SUB T,FSMAX
ADDM T,FSFREE
ADDB T,FSMAX
SUBI TT,-200(A)
HRROM TT,-200(A)
HRROM TT,-1(T)
POPJ P,
CRUNCH: MOVE A,FSMAX
MOVEM A,FSBIG
PUSH P,C
PUSH P,D
PUSH P,TT
PUSHJ P,FSLSCN
JFCL ;SHOULDN'T HAPPEN UNLESS CORE LOCKED
POP P,T
CAME TT,T
PUSHJ P,FSLSHF
POP P,D
POP P,C
POPJ P,
CMPACT: MOVN TT,FSFREE
JUMPE TT,CPOPJ
PUSH P,A
PUSHJ P,CRUNCH
JRST POPAJ
;ENDSET, ENDFIX
ENDSET: MOVE A,FSMAX
SKIPL TT,-1(A)
MOVEI TT,
SUB TT,FSFREE
HRREI TT,200(TT)
JUMPGE TT,.+2
PUSHJ P,CRUNCH
MOVE A,FSMAX
SKIPGE T,-1(A)
SUBI A,(T)
MOVEM A,FSEND#
MOVEM A,FSEND1#
JUMPGE T,.+3
MOVNI T,(T)
ADDM T,FSFREE
POPJ P,
ENDFIX: MOVEI TT,
EXCH TT,FSEND1
MOVE T,FSEND
SUB T,TT
ADDM T,FSUSE
ADD T,TT
MOVEM T,FSMAX
CAMLE T,JOBREL
POPJ P,
CAMN TT,FSBEG
MOVEM T,FSBEG
MOVE T,JOBREL
AOJ T,
MOVEM T,FSMAX
SUB T,FSEND
HRROM T,@FSEND
HRROM T,@JOBREL
ADDM T,FSFREE
POPJ P,
;FSCHK, FCLUP1, FCLUP2, FCFR, FCDON
IFN DEBSW{
FSCHK: MOVE A,FSMAX
SOJ A,
CAME A,JOBREL
JRST 4,.
FSCHK1: SETZB D,E
MOVE A,FSMIN
FCLUP1: CAMN A,FSBEG
JRST FCLUP2
CAML A,FSMAX
JRST 4,.
SKIPGE T,(A)
JRST 4,.
PUSHJ P,FUCHK
AOJA B,FCLUP1
FCLUP2: CAMN A,FSMAX
JRST FCDON
CAMLE A,FSMAX
JRST 4,.
SKIPGE T,(A)
JRST FCFR
PUSHJ P,FUCHK
AOJA B,FCLUP2
FCFR: HLRZ TT,T
CAIE TT,-1
JRST 4,.
ADDI A,(T)
MOVE TT,-1(A)
CAME TT,T
JRST 4,.
ADDI E,(T)
JRST FCLUP2
FCDON: CAME D,FSUSE
JRST 4,.
CAME E,FSFREE
JRST 4,.
IFE PURESW,<
SKIPL PURFLG
POPJ P,
PUSH P,B
PUSHJ P,PURCHK
POP P,B
> JRST POPJ1
;FUCHK, MOVIT, MOVTX
FUCHK: XCT @-1(P)
HLRZ TT,T
CAIL TT,MXSHF
JRST 4,.
ADDI A,(T)
HLRZ TT,-1(A)
CAMLE TT,JOBREL
JRST 4,.
HRRZ TT,-1(A)
CAIE TT,(T)
JRST 4,.
ADDI D,(T)
POPJ P,
MOVIT: TLNE F,NOSHUF
POPJ P,
SKIPLE SAVMOD
PUSHJ P,SAVIT
SETCMB T,MVPHAZ#
JUMPGE T,CMPACT
PUSH P,A
PUSH P,C
PUSH P,D
MOVE A,FSMIN
MOVEM A,FSBIG
MOVN TT,FSFREE
JUMPE TT,MOVTX
PUSHJ P,FSHSCN
JFCL
ADD TT,FSFREE
JUMPLE TT,MOVTX
PUSHJ P,FSHSHF
MOVTX: POP P,D
POP P,C
JRST POPAJ
;PURINI, PLCHK, PL2CHK, PLCHKL, PLSCN0, PLSCN, PLSCN1, PLSCN2, PLSCN3
IFE PURESW,{
PURINI: JSP G,PLCHK
MOVEM A,PLCHK1
MOVEM B,PLCHK2
JSP G,PLSCN0
MOVEM A,PURCK
MOVSI H,-ADRSIZ
JSP G,PLSCN
MOVEM A,PURCK+1(H)
AOBJN H,.-2
SETOM PURFLG
SKIPE A,JOBDDT
TLNN A,-40
JRST (E)
MOVE A,-6(A) ;$I
HRLI A,(<JSR>)
MOVEM A,BPTINS
JRST (E)
PLCHK: MOVEI TT,PURLST
PL2CHK: SETZB A,B
PLCHKL: XOR A,(TT)
XOR B,-1(TT)
MOVEI T,(TT)
HRRZ TT,(TT)
CAIGE TT,(T)
JUMPN TT,PLCHKL
JRST (G)
PLSCN0: TDZA H,H
PLSCN: MOVEI B,@BITTAB+44-ADRSIZ(H)
MOVEI TT,PURLST
MOVEI A,
PLSCN1: HLRZ T,(TT)
HRLI T,1(T) ;ALLOW FOR CARRY
SUBI T,1(TT)
MOVS T,T
JUMPL H,PLSCN3
XOR A,(T)
AOBJN T,.-1
PLSCN2: HRRZ TT,-1(T)
JUMPN TT,PLSCN1
JRST (G)
PLSCN3: TRNE T,(B)
XOR A,(T)
AOBJN T,PLSCN3
JRST PLSCN2
;PURCHK, PURCH1, PURCH2, PURCH3, PURC3A
PURCHK: JSP G,PLCHK
CAMN A,PLCHK1
JUMPE TT,PURCH1
MOVEI TT,PURLST-1
JSP G,PL2CHK
CAMN A,PLCHK2
JUMPE TT,PURCH4
FATAL BOTH PURE LISTS CLOBBERED
PURCH1: CAME B,PLCHK2
JRST PURCH7
PURCH2: JSP G,PLSCN0
CAMN A,PURCK
POPJ P,
MOVE C,A
XOR C,PURCK
MOVEI D,
MOVSI H,-ADRSIZ
PURCH3: JSP G,PLSCN
CAMN A,PURCK+1(H)
JRST .+4
XOR A,C
IORI D,(B)
CAMN A,PURCK+1(H)
AOBJN H,PURCH3
CAIGE D,ENDPUR
JUMPGE H,.+2
FATAL MULTIPLE LOCATIONS CLOBBERED
REPEAT 0,<
SKIPE LSTCOM
JRST PURC3A
OPEN SWP,[17↔'DSK '↔0]
JRST 4,.
MOVE T,[LOGFIL,,OBUF]
BLT T,OBUF+3
ENTER SWP,OBUF
JRST PURC3B
MOVE T,[74,,OBUF]
BLT T,OBUF+177
MOVE T,41
MOVEM T,JOBS41↑-74+OBUF
OUTPUT SWP,[-200,,OBUF-1↔0]
MOVEI T,OBUF
BLT T,OBUF+17
SETCM T,JOBREL
MOVSI T,274(T)
HRRI T,274-1
MOVEI TT,
OUTPUT SWP,T
OPEN SWP,[17↔'DSK '↔0]
JRST 4,.
MOVE T,[SAVFIL,,OBUF]
BLT T,OBUF+3
ENTER SWP,OBUF
JRST PURC3B
MOVEI A,
MTAPE DSKO,A
USETI DSKO,1
SKIPA T,[-200,,OBUF-1↔0]
OUTPUT SWP,[-200,,OBUF-1↔0]
IN DSKO,[-200,,OBUF-1↔0]
JRST .-2
HLL T,LKUP+3
TLO T,-200
TLNE T,177
OUTPUT SWP,T
USETI DSKO,(A)
PURC3B: RELEAS SWP,
PURC3A:>
XOR C,(D)
MOVE T,(D)
CAME T,BPTINS
CAMN C,BPTINS
JRST PURCLC
PUSH P,TYOPNT
SETZM TYOPNT
OUTSTR [ASCIZ /
LOC /]
TYPOCT D
OUTSTR [ASCIZ / WAS CLOBBERED FROM /]
MOVE T,C
PUSHJ P,TYPHW
OUTSTR [ASCIZ / TO /]
MOVE T,(D)
PUSHJ P,TYPHW
POP P,TYOPNT
MOVEM C,(D)
TRO F,DSPALL
OUTSTR [ASCIZ /
IT'S FIXED. GO ON?/]
PUSHJ P,YESCHK
POPJ P,
JRST 4,.-3
;PURCH4, PURCH5, PURCH6, PURCH7, PURCLC, TYPHW, PURCK, PLCHK1, PLCHK2, PURFLG
PURCH4: MOVEI TT,PURLST-1
MOVEI A,1
PURCH5: MOVSI B,TT
HRRI B,(A)
PURCH6: MOVE T,(TT)
TRNE T,-1
ADD T,A
MOVEM T,@B
HRRZ TT,(TT)
JUMPN TT,PURCH6
JRST PURCH2
PURCH7: MOVEI TT,PURLST
MOVNI A,1
JRST PURCH5
PURCLC: SKIPN PURFLG
POPJ P,
FOR X IN(A,B,E,PURFLG){PUSH P,X↔}
JSP E,PURINI
POP P,PURFLG
POP P,E
JRST POPBAJ
TYPHW: HLRZ TT,T
JUMPE TT,TYPHW2
TYPOCT TT
TYPCHR ","
TYPCHR ","
TYPHW2: MOVEI TT,(T)
TYPOCT TT
POPJ P,
IMPURE
PURCK: BLOCK ADRSIZ+1
PLCHK1: 0
PLCHK2: 0
PURFLG: 0
BPTINS: 0
LOGFIL: SIXBIT /ELOSERDMP )( S FW/
SAVFIL: SIXBIT /ELOSERFIL )( S FW/
PURE
}
;SAVIT
SAVIT: MOVEM OBUF
MOVE [1,,OBUF+1]
BLT OBUF+137
MOVE OBUF
SKIPE T,FBBAND
JRST .+3
UFBGET T,
JRST [OUTSTR [ASCIZ /NO FAST BANDS!
/]↔POPJ P,]
MOVEM T,FBBAND#
MOVE T,JOBREL
SUBI T,140-1
MOVEM T,FBCMD+1
MOVEI T,
FBWRT T,FBCMD
JRST 4,.
POPJ P,
SAVRET: MOVE T,FBCMD+1
ADDI T,140-1
CORE T,
JRST 4,.
MOVEI T,
FBREAD T,FBCMD
JRST 4,.
MOVE [OBUF+1,,1]
BLT 137
MOVE OBUF
SETZM SAVMOD
SETZM JOBOPC
PUSHJ P,@JOBDDT
PUSH P,T
TRZE F,EDITM
SETOM LEPOS
PUSHJ P,DDTRET
SKIPGE LEPOS
TRO F,EDITM
POP P,T
POPJ P,
IMPURE
FBCMD: 140↔0↔3
PURE
;CHECK, CHECK1, CHECK2
CHECK: MOVEI B,
PUSHJ P,FSCHK
JFCL
MOVEM B,FSCNT#
SKIPG CHKMOD
JRST CHECK2
PUSHJ P,CHECK2
PUSHJ P,MOVIT
PUSHJ P,CHECK1
PUSHJ P,MOVIT
CHECK1: MOVEI B,
PUSHJ P,FSCHK
JFCL
CAME B,FSCNT
JRST 4,.
CHECK2: ADD B,JOBREL
CORE B,
JRST 4,.
MOVE B,FSMAX
MOVEM B,FSPNT#
PUSHJ P,FSCHK1
HRLZM A,(B)
MOVN B,FSCNT
HRLZ B,B
HRR B,FSPNT
AOBJP B,.+3
HRRM B,-1(B)
AOBJN B,.-1
PUSHJ P,CHKDIR
PUSHJ P,CHKPAG
PUSHJ P,CHKATT
SKIPE FSPNT
JRST 4,.
MOVE B,FSMAX
SOJ B,
CORE B,
JRST 4,.
SKIPE SAVMOD
JRST SAVIT
POPJ P,
;CHKDIR, CHKDPL
CHKDIR: MOVEI A,DIR
SETZM CHKCNT#
SETZM CHKTMP#
MOVEI DSP,CDDSP
MOVSI H,NSPEC+LSPC+DSPC
MOVNI D,1
PUSHJ P,CHKDR4
MOVN D,PAGES
HRLZ D,D
PUSHJ P,CHKDR1
AOBJN D,.-1
HRRZ T,(A)
CAIE T,DIREND
JRST 4,.
MOVSI T,(A)
CAME T,DIREND
JRST 4,.
TLNE DSP,D1BIT
TLNN DSP,DPBIT
JRST 4,.
MOVE T,CHKCNT
ADD T,DIROVH
CAME T,DIRSIZ
JRST 4,.
MOVEI A,DIREND
PUSHJ P,CHKD4A
SKIPN DPLST
POPJ P,
MOVEI A,DPLST
SETZM CHKTMP
CHKDPL: PUSHJ P,CHKDR1
HRRZ T,(A)
CAIE T,DPLST
JRST CHKDPL
HLRZ T,DPLST
CAIE T,(A)
JRST 4,.
POPJ P,
CDDSP: JRST 4,.
JRST 4,.
JRST CHKDR3
JRST 4,.
JFCL
JRST 4,.
JRST 4,.
JRST 4,.
JRST 4,.
;CHKDR1, CHKD1A, CHKDR2, CDDSP, CHKDR3, CHKDR4, CHKD4A
CHKDR1: PUSHJ P,CHKLST
HLRZ T,-1(A)
CAIE T,DIRCOD
JRST 4,.
PUSHJ P,CHKDR4
CHKD1A: TLZ E,RPMASK
TDNE E,[-1000]
JRST 4,.
MOVEI T,=12(E)
ADDM T,CHKCNT
MOVSI G,440700
HRRI G,LPDESC(A)
CHKDR2: GETCH2 H,G
SOJG E,CHKDR2
JRST 4,.
CHKDR3: ILDB C,G
CAIE C,12
JRST 4,.
ILDB C,G
CAIN C,177
CAIE E,2
JRST 4,.
HRRZ T,-1(A)
ADDI T,-3(A)
CAIE T,(G)
JRST 4,.
POPJ P,
CHKDR4: PUSHJ P,CHKD4A
MOVE E,2(A)
JSP B,CHKPNT
D1BIT,,
DIRP1
FIRPAG
TLZN E,DPBIT
POPJ P,
TLNN DSP,D1BIT
JRST 4,.
JSP B,CHKPN2
DPBIT,,
DIRPT
CURPAG
POPJ P,
CHKD4A: SKIPN T,1(A)
POPJ P,
ROT T,7
TLZ T,¬177
CAMGE T,CHKTMP
JRST 4,.
MOVEM T,CHKTMP
POPJ P,
;CHKLST, CHKFS, CHKFSL, CHKFS2, CHKPNT, CHKPN2
CHKLST: MOVEI B,(A)
HRRZ A,(A)
HLRZ T,(A)
CAIE T,(B)
JRST 4,.
CHKFS: HRLOI T,-2(A)
MOVEI C,FSPNT
SKIPN B,FSPNT
JRST 4,.
CHKFSL: CAMG T,(B)
JRST CHKFS2
MOVEI C,(B)
HRRZ B,(B)
JUMPN B,CHKFSL
JRST 4,.
CHKFS2: HLRZ T,(B)
CAIE T,-1(A)
JRST 4,.
HRRZ T,(B)
HRRM T,(C)
POPJ P,
CHKPNT: TDZN E,(B)
JRST 3(B)
CHKPN2: CAMN A,@1(B)
TDOE DSP,(B)
JRST 4,.
MOVEI T,1(D)
CAME T,@2(B)
JRST 4,.
JRST 3(B)
;CHKPAG, CHKPGP
CHKPAG: MOVEI A,PAGE
SETZM CHKCNT
MOVEI DSP,CPDSP
MOVSI H,NSPEC+LSPC
MOVN D,LINES
JUMPE D,.+3
HRLZ D,D
PUSHJ P,CHKPG1
HRRZ T,(A)
CAIE T,BOTSTR
JRST 4,.
HLRZ T,BOTSTR
CAIE T,(A)
JRST 4,.
MOVEI A,BOTSTR
MOVE E,BOTSTR+1
PUSHJ P,CHKPGP
JUMPN E,[JRST 4,.]
SKIPN WINLIN
SKIPL BOTWIN
TLNE DSP,WINBIT
TLNN DSP,ARRBIT
JRST 4,.
MOVE A,CHKCNT
MOVE T,FIRPAG
SOJG T,[AOJA A,.+1]
CAME A,CHARS
JRST 4,.
POPJ P,
CHKPGP: JSP B,CHKPNT
ARRBIT,,
ARRLIN
ARRL
JSP B,CHKPNT
WINBIT,,
WINLIN
TOPWIN
POPJ P,
;CHKPG1, CHKPG2, CPDSP, CHKPGT, CHKPTL
CHKPG1: PUSHJ P,CHKLST
HLRZ T,-1(A)
CAIE T,TXTCOD
JRST 4,.
SKIPGE E,1(A)
JRST 4,.
PUSHJ P,CHKPGP
TLNE E,-1
JRST 4,.
LDB T,[111100,,E]
ADDM T,CHKCNT
MOVSI G,440700
HRRI G,LLDESC(A)
MOVEI B,
TRNE E,777
JRST CHKPG2
ILDB C,G
CAIE C,40
JRST 4,.
CHKPG2: GETCH2 H,G
SUBI E,1001
JUMPLE E,[JRST 4,.]
AOJA B,CHKPG2
CPDSP: JRST 4,.
JRST 4,.
JRST CHKPG3
JRST 4,.
JRST CHKPGT
JRST 4,.
JRST 4,.
CHKPGT: SUBI E,1000
HRL B,B
TLO B,-10
CHKPTL: ILDB C,G
CAIE C,40
JRST 4,.
SOJLE E,[JRST 4,.]
AOBJN B,CHKPTL
ILDB C,G
CAIE C,11
JRST 4,.
JRST CHKPG2
;CHKPG3, CHKPG4, CHKPG5, CHKPG6
CHKPG3: ILDB C,G
CAIE C,12
JRST 4,.
CHKPG4: TLNN A,760000
JRST CHKPG5
ILDB C,G
JUMPE C,CHKPG4
JRST 4,.
CHKPG5: CAIE E,2000
JRST 4,.
HRRZ T,-1(A)
ADDI T,-3(A)
SKIPGE 1(A)
SUBI T,2
CAIE T,(G)
JRST 4,.
SUBM A,G
MOVSI G,LLDESC-1(G)
HRRI G,LLDESC(A)
MOVEI T,1
CHKPG6: TDNN T,(G)
JRST 4,.
AOBJN G,CHKPG6
AOBJN D,CHKPG1
POPJ P,
;CHKATT, CHKNAT
CHKATT: TRNN F,ATTMOD
JRST CHKNAT
SETZM CHKCNT
MOVEI A,ATTBUF
MOVE DSP,[ARRBIT!WINBIT,,CPDSP]
MOVSI H,NSPEC+LSPC
MOVN D,ATTNUM
JUMPE D,[JRST 4,.]
HRLZ D,D
PUSHJ P,CHKPG1
HRRZ T,(A)
CAIE T,ATTBUF
JRST 4,.
HLRZ T,ATTBUF
CAIE T,(A)
JRST 4,.
MOVE T,CHKCNT
CAME T,ATTSIZ
JRST 4,.
POPJ P,
CHKNAT: SKIPE ATTNUM
JRST 4,.
POPJ P,
IMPURE
SHFMOD: 0
CHKMOD: 0
SAVMOD: 0
PURE
}
;CTAB 0-37
ED←←EDOK*5 EDCMD←←EDOK*7
CTAB: NSPEC,,(DSP) ;NUL
ED,,%DA(DSP) ;↓
ED,,7(DSP) ;α
ED,,7(DSP) ;β
SSP2!ED,,12(DSP) ;∧
SSP1!ED,,13(DSP) ;¬
ED,,7(DSP) ;ε
ED,,7(DSP) ;π
ED,,7(DSP) ;λ
LSPC!EDCMD,,4(DSP) ;TAB
LSPC,,3(DSP) ;LF
%U(DSP) ;VT (INTEGRAL)
SSP1!LSPC,,5(DSP) ;FF
SSP1!FSPC!LSPC,,2(DSP) ;CR
SSP1!ED,,21(DSP) ;∞
ED,,7(DSP) ;∂
SSP1!ED,,14(DSP) ;⊂
SSP2!ED,,15(DSP) ;⊃
ED,,7(DSP) ;∩
ED,,7(DSP) ;∪
SSP1!ED,,16(DSP) ;∀
ED,,7(DSP) ;∃
DSPC!ED,,10(DSP) ;⊗
ED,,7(DSP) ;↔
LT2F!ED,,7(DSP) ;_
FSPC!ED,,7(DSP) ;→
ED,,7(DSP) ;~
ED,,7(DSP) ;≠
ED,,%LE(DSP) ;≤
ED,,%GE(DSP) ;≥
SSP1!ED,,17(DSP) ;≡
SSP2!ED,,20(DSP) ;∨
;CTAB 40-77
EDCMD,,7(DSP) ;SP
ED,,7(DSP) ;!
ED,,7(DSP) ;"
ED,,7(DSP) ;#
LT2F!ED,,7(DSP) ;$
LT2F!ED,,7(DSP) ;%
ED,,7(DSP) ;&
ED,,7(DSP) ;'
FSPC!ED,,7(DSP) ;(
ED,,7(DSP) ;)
ED,,7(DSP) ;*
ED,,%PLS(DSP) ;+
FSPC!ED,,7(DSP) ;,
ED,,%MIN(DSP) ;-
FSPC!ED,,%.(DSP) ;.
FSPC!ED,,7(DSP) ;/
NUMF!ED,,11(DSP) ;0
NUMF!ED,,11(DSP) ;1
NUMF!ED,,11(DSP) ;2
NUMF!ED,,11(DSP) ;3
NUMF!ED,,11(DSP) ;4
NUMF!ED,,11(DSP) ;5
NUMF!ED,,11(DSP) ;6
NUMF!ED,,11(DSP) ;7
NUMF!ED,,11(DSP) ;8
NUMF!ED,,11(DSP) ;9
FSPC!ED,,7(DSP) ;:
FSPC!DSPC!ED,,10(DSP) ;;
ED,,%LT(DSP) ;<
ED,,7(DSP) ;=
ED,,%GT(DSP) ;>
ED,,7(DSP) ;?
;CTAB 100-137
ED,,7(DSP) ;@
LETF!ED,,%A(DSP) ;A
LETF!ED,,%B(DSP) ;B
LETF!ED,,%C(DSP) ;C
LETF!EDCMD,,%D(DSP) ;D
LETF!ED,,%E(DSP) ;E
LETF!ED,,%F(DSP) ;F
LETF!ED,,7(DSP) ;G
LETF!ED,,7(DSP) ;H
LETF!EDCMD,,%I(DSP) ;I
LETF!ED,,%J(DSP) ;J
LETF!EDCMD,,%K(DSP) ;K
LETF!ED,,%L(DSP) ;L
LETF!ED,,%M(DSP) ;M
LETF!ED,,7(DSP) ;N
LETF!ED,,7(DSP) ;O
LETF!ED,,%P(DSP) ;P
LETF!ED,,%Q(DSP) ;Q
LETF!ED,,%R(DSP) ;R
LETF!EDCMD,,7(DSP) ;S
LETF!ED,,%T(DSP) ;T
LETF!ED,,%U(DSP) ;U
LETF!ED,,%V(DSP) ;V
LETF!ED,,%W(DSP) ;W
LETF!ED,,%X(DSP) ;X
LETF!ED,,7(DSP) ;Y
LETF!ED,,7(DSP) ;Z
FSPC!ED,,7(DSP) ;[
ED,,7(DSP) ;\
FSPC!ED,,7(DSP) ;]
ED,,%UA(DSP) ;↑
FSPC!ED,,7(DSP) ;←
;CTAB 140-177
ED,,7(DSP) ;`
LETF!LT2F!ED,,%A(DSP) ;a
LETF!LT2F!ED,,%B(DSP) ;b
LETF!LT2F!ED,,%C(DSP) ;c
LETF!LT2F!EDCMD,,%D(DSP) ;d
LETF!LT2F!ED,,%E(DSP) ;e
LETF!LT2F!ED,,%F(DSP) ;f
LETF!LT2F!ED,,7(DSP) ;g
LETF!LT2F!ED,,7(DSP) ;h
LETF!LT2F!EDCMD,,%I(DSP) ;i
LETF!LT2F!ED,,%J(DSP) ;j
LETF!LT2F!EDCMD,,%K(DSP) ;k
LETF!LT2F!ED,,%L(DSP) ;l
LETF!LT2F!ED,,%M(DSP) ;m
LETF!LT2F!ED,,7(DSP) ;n
LETF!LT2F!ED,,7(DSP) ;o
LETF!LT2F!ED,,%P(DSP) ;p
LETF!LT2F!ED,,%Q(DSP) ;q
LETF!LT2F!ED,,%R(DSP) ;r
LETF!LT2F!EDCMD,,7(DSP) ;s
LETF!LT2F!ED,,%T(DSP) ;t
LETF!LT2F!ED,,%U(DSP) ;u
LETF!LT2F!ED,,%V(DSP) ;v
LETF!LT2F!ED,,%W(DSP) ;w
LETF!LT2F!ED,,%X(DSP) ;x
LETF!LT2F!ED,,7(DSP) ;y
LETF!LT2F!ED,,7(DSP) ;z
ED,,7(DSP) ;{
SSP1!ED,,22(DSP) ;|
LSPC,,6(DSP) ;ALT-MODE
ED,,7(DSP) ;}
NSPEC,,1(DSP) ;RUBOUT
NSPEC,,-1(DSP) ;SEE RDPAG1
;GETDIR
GETDIR: MOVEI DSP,GDDSP
FOR X IN (DIR,PAGES,FIRPAG,CURPAG){SETZM X↔}
MOVEI T,XDIRCH
MOVEM T,DIROVH#
MOVEM T,DIRSIZ#
PUSHJ P,ENDSET
MOVSI G,NSPEC+LSPC+NUMF
MOVE H,INPNT
SETZB A,Q
MOVE B,[440700,,[ASCIZ /COMMENT ⊗ xxVALID PAGES/]]
MOVE D,[160700,,Q]
ILDB C,H
SKIPGE CTAB(C)
XCT @CTAB(C)
MOVE T,(H)
AND T,[BYTE (7)160,160,160,160,160(1)1]
CAMN T,[ASCID /00000/]
JRST .+3
CAME T,[ASCID / /]
JRST DIRCL1
HLLOS @SRCFIL+4
AOJA H,DIRCL
;DIRCL2, DIRCL, DIRCL1, GETDR1
DIRCL2: IDPB C,D
DIRCL: GETCH2 G,H
DIRCL1: ILDB E,B
CAIN C,(E)
JRST DIRCL
CAIN E,"x"
JRST DIRCL2
JUMPN E,NODIR
MOVEI D,DIR
CAIN Q," "
JRST .+3
CAIE Q,"IN"
JRST NODIR
JUMPE A,NODIR
SKIPN @SRCFIL+4
CAIE Q," "
JRST BADDIR
MOVEM A,PAGES
MOVNI B,(A)
CAIE C," "
TDZA E,E
MOVE E,[440700,,VBUF]
MOVSI G,LSPC!NSPEC
MOVNI T,1
JSP TT,LSKP2
JUMPE E,GETD1A
IDPB C,E
MOVEI C,177
IDPB C,E
CAMN E,[100700,,VBUF]
GETD1A: SETZB T,VBUF
ADDB T,DIROVH
MOVEM T,DIRSIZ
HLRZ T,@SRCFIL+1
CAIN T,'F4 '
SKIPE RDONLY
JRST GETDR1
GETCH2 G,H
CAIN C,"C"
JRST GETDR1
OUTSTR [ASCIZ /OLD FORMAT DIRECTORY.
REWRITE?/]
PUSHJ P,YESCHK
TRO F,UPDTXT
GETDR1: JSP TT,LSKP1
MOVE E,FSEND
MOVEI TT,DIRLF
;DIRLIN, DIRLUP, DIRDON
DIRLIN: GETCH2 G,H ;SKIP C (OR SPACE)
MOVEI A,
MOVSI G,NSPEC+LSPC+NUMF
GETCH2 G,H ;READ REC
DIRLN2: MOVEI E,1(E)
HRRM E,(D)
LEG HRLZM D,(E)
MOVEI D,(E)
LEG MOVEM A,1(D)
ADD E,[440700,,LPDESC]
MOVSI G,NSPEC+LSPC
REPEAT 5,{GETCH2 G,H} ;SKIP PAGE #
MOVEI Q,1
DIRLUP: GETCH2 G,H
LEG IDPB C,E
AOJA Q,DIRLUP
DIRLF:
LEG IDPB C,E
MOVEI C,177
LEG IDPB C,E
ADDI E,2
MOVSI T,DIRCOD
FSFIX E,T
HRRZM Q,2(D)
ADDM Q,DIRSIZ
AOJL B,DIRLIN
TRNE F,FILLUZ
JRST GDIRX
GETCH2 G,H
MOVEI A,
MOVSI G,NSPEC+LSPC+NUMF
GETCH2 G,H
SOJ A,
CAMGE A,FILLEN
OUTSTR [ASCIZ /WARNING -- FILE LONGER THAN DIRECTORY INDICATES.
/]
CAMLE A,FILLEN
FATAL FILE SHORTER THAN DIRECTORY INDICATES
AOJ A,
MOVEM A,DIREND+1
GETCH2 G,H
CAIE C,"E"
JRST LOSDIR
SOS SPAGE
TRO F,DIROK
SKIPE @DSTFIL+4
TRO F,COPY
GDIRX: MOVEI E,DIREND
HRRM E,(D)
HRLZM D,DIREND
PUSHJ P,ENDFIX
MOVE T,PAGES
IMULI T,=12 ;CHARS/LINE FOR NUMS
ADDB T,DIRSIZ
MOVEM T,ODSIZ#
SETZM DIREND+2
POPJ P,
;LOSDIR, BADDIR, NODIR, DIRNUM, GDDSP, LSKP1, DIRSHF, DIREND
LOSDIR: SKIPN PAGES
JRST NODIR
PUSHJ P,ENDFIX
PUSHJ P,FLSDIR
SKIPA T,[[ASCIZ /DIRECTORY IS GARBLED - WILL RECREATE/]]
BADDIR: MOVEI T,[ASCIZ /DIRECTORY INVALID OR UNDESIRED/]
SKIPE QUIETF
JRST DELDIR
OUTSTR (T)
OUTSTR [ASCIZ /. KEEP OLD ONE AS PART OF TEXT?/]
HRLOM H,@SRCFIL+4
PUSHJ P,YESCHK
JRST NODIR
DELDIR: SETOM @SRCFIL+4
SOS SPAGE
TROA F,COPY
NODIR: HLLOS @SRCFIL+4
MOVEI D,DIR
SETZM DIREND+1
TRO F,FILLUZ
TRZ F,UPDTXT
SKIPN RDONLY
TROA F,COPY
SKIPE DIR
JRST GDIRX
AOS PAGES
MOVE E,FSEND
MOVEI A,1
MOVEI B,
MOVEI TT,DIRLF
MOVE H,[440700,,[ASCII /XXXXX
/]]
JRST DIRLN2
FLSDIR: SETZM PAGES
SKIPN A,DIR
POPJ P,
HRRZ B,(A)
CAIE A,DIREND
PUSHJ P,FSGIVE
SKIPE A,B
JRST .-3
MOVEI T,XDIRCH
MOVEM T,DIRSIZ
SETZM DIR
POPJ P,
DIRNUM: IMULI A,12
ADDI A,-"0"(C)
JRST -3(T)
;THIS IS THE DISPATCH TABLE (DSP) USED BY GETDIR. REFERENCED BY XCT @CTAB(C)
GDDSP: JSP C,[JRST -3(C)]
PUSHJ P,RLD
JFCL
JRST (TT)
JFCL
JRST LOSDIR ;FF IN MID-DIR EATS IT
MOVEI C,"}"
JRST 4,.
JRST 4,.
JSP T,DIRNUM
LSKP1: GETCH2 G,H
GETCH2 G,H
JRST LSKP1
LSKP2A: GETCH2 G,H
LSKP2: IDPB C,E
AOJA T,LSKP2A
DIRSHF: PUSHJ P,LSTSHF
SKIPGE T,3(A)
ADDM C,DIRPT
TLNE T,D1BIT
ADDM C,DIRP1
POPJ P,
IMPURE
DIREND: BLOCK LPDESC
PURE
;COPFIL, COPFL1, COPDO, COPYX, COPDAT, COPLUP
COPFIL: TRZN F,COPY
POPJ P,
TLZ F,TF1
MOVE A,@DSTFIL
MOVE B,@DSTFIL-1
CAMN B,@SRCFIL-1
CAME A,@SRCFIL
JRST COPFL0
HLRZ B,@SRCFIL+1
HLRZ C,@DSTFIL+1
MOVE A,@DSTFIL+3
CAIN B,(C)
CAME A,@SRCFIL+3
COPFL0: PUSHJ P,COPCHK
MOVE T,@SRCFIL+2
MOVEM T,@DSTFIL+2
HRRZ T,@SRCFIL+1
HRRM T,@DSTFIL+1
MOVEI E,@DSTFIL
PUSHJ P,OPENO
SKIPN @SRCFIL+4
SKIPE @DSTFIL+4
JRST FORMAT
MOVEI A,1
COPFL1: PUSHJ P,SETI
PUSHJ P,COPCOR
MOVS A,LKUP+3
COPDO: PUSHJ P,COPDAT
COPYX: CLOSE DSKO,
RELEAS DSKO, ;SHIT-EATING SYSTEM!
SETZM JOBJDA+DSKO
MOVE A,FSMAX
SUBI A,1
CORE A,
JRST 4,.
POPJ P,
COPDAT: JUMPGE A,CPOPJ
DPB A,[221200+COPNUM*100,,COPCMD]
INPUT DSKI,COPCMD
OUTPUT DSKO,COPCMD
ASH A,-12-COPNUM
AOJGE A,CPOPJ
MOVEI B,
DPB B,[310300+COPNUM*100,,COPCMD]
COPLUP: INPUT DSKI,COPCMD
OUTPUT DSKO,COPCMD
AOJL A,COPLUP
POPJ P,
;COPCOR, COPCHK, YESCHK, COPCMD
COPCOR: MOVE T,JOBREL
HRRM T,COPCMD
ADDI T,2000⊗COPNUM
CORE T,
JRST 4,.
POPJ P,
COPCHK: TLO F,TF1
SKIPE QUIETF
POPJ P,
MOVSI T,@DSTFIL
ADD T,[-1,,ENTR-1]
MOVEI C,DSKO
PUSHJ P,OPNDEV
LOOKUP DSKO,ENTR
POPJ P,
CLOSE DSKO,
OUTSTR [ASCIZ/FILE ALREADY EXISTS: /]
MOVEI D,@DSTFIL
PUSHJ P,FILTYP
OUTSTR [ASCIZ/
REPLACE?/]
PUSHJ P,YESCHK
POPJ P,
SUB P,[2,,2]
JRST FNF2
YESCHK: CLRBFI
INCHRW C
CAIN C,15
INCHRW C
CAIE C,12
OUTSTR [ASCIZ/
/]
CAIE C,"Y"
CAIN C,"y"
POPJ P,
JRST POPJ1
IMPURE
COPCMD: -2000,,
0
PURE
;FORMAT, FMTOK, FMTDSP
FORMAT: TLNN F,TF1
SKIPE QUIETF
JRST FMTOK
HLLZ T,@SRCFIL+4
XOR A,RPPN
TRNN A,-1
JUMPN T,FMTOK
SKIPE CREASW
JRST FMTOK
OUTSTR [ASCIZ /NEED TO REFORMAT /]
MOVEI D,@DSTFIL
PUSHJ P,FILTYP
OUTSTR [ASCIZ /. OK?/]
PUSHJ P,YESCHK
JRST FMTOK
SUB P,[1,,1]
JRST FNF2
FMTOK: MOVEI A,1
PUSHJ P,SETI
MOVE A,@SRCFIL+4
ROT A,1
ANDI A,3
MOVE T,TRMCHR
CAIE T,"→"
XCT FMTDSP(A)
OUTSTR [ASCIZ /REQUESTED FORMAT CHANGE MODE NOT IMPLEMENTED.
/]
JRST GETOU1
FMTDSP: JFCL
JRST 4,.
JRST MAKDIR
JRST NEWDIR
;NEWDIR, NEWDLP, SKPDSP, NEWDFF, OPUT, OSET, TMPDIR
NEWDIR: MOVEI DSP,SKPDSP
MOVSI H,LSPC+NSPEC
MOVE G,INPNT
NEWDLP: GETCH2 H,G
GETCH2 H,G
JRST NEWDLP
SKPDSP: JSP C,RDLNUL
PUSHJ P,RLD
JRST NEWDLP
JRST NEWDLP
JRST NEWDLP
JRST NEWDFF
JRST NEWDLP
NEWDFF: SKIPE @DSTFIL+4
JRST MAKDR0
SKIPA T,IBLK
PUSHJ P,WRBUF
SOJG T,.-1
JRST MAKDR0
OPUT: PUSHJ P,WRBUF
OSET: MOVN A,OCNT
HRLI B,(A)
MOVE A,OPNT
POPJ P,
;MAKDIR, MAKDR0, MAKDR1, MAKDOL, MDOL1
MAKDIR: MOVE G,INPNT
MOVEI C,14
MAKDR0: PUSHJ P,FLSDIR
SKIPE @DSTFIL+4
JRST MAKDR1
MOVE T,[DIR,,DIREND]
PUSHJ P,DIRAD1
MOVNI T,=12
ADDM T,DIRSIZ ;DON'T COUNT THIS TWICE
MOVEI T,1
MOVEM T,1(A)
SKIPA D,A
MAKDR1: MOVEI D,DIR
PUSHJ P,ENDSET
MOVE E,FSEND
MAKDOL: PUSHJ P,OSET
HRRI B,
SKIPN PAGES
JRST MDOL1
IDPB C,A
AOBJN B,.+2
PUSHJ P,OPUT
MDOL1: MOVEI E,1(E)
HRRM E,(D)
LEG HRLZM D,(E)
MOVEI D,(E)
MOVE T,OBLK
LEG MOVEM T,1(D)
ADD E,[350700,,LPDESC]
MOVSI T,(<BYTE (7)11>)
LEG MOVEM T,(E)
HRRI B,1
MOVSI H,LSPC+DSPC+NSPEC
MOVEI DSP,MD1DSP
MOVE T,[440700,,T]
MOVEM T,INPNT
SETZB T,TT
JSP Q,SOSCHK
;MDIL1, MDIL1A, MDIL2, MDIL2A, MDCSRC, MDCSR1, MD1DSP
MDIL1: GETCH2 H,G
IDPB C,A
AOBJN B,.+2
PUSHJ P,OPUT
LEG IDPB C,E
CAIL C,140
SUBI C,40
IDPB C,INPNT
CAIG C,40
JRST MDCSRC
TRNN B,-10
JRST MDIL1
MDIL1A: MOVEI DSP,MD2DSP
MOVEI T,MD2CR
MOVEM T,INPNT
MDIL2: GETCH2 H,G
LEG IDPB C,E
MDIL2A: IDPB C,A
AOBJN B,MDIL2
PUSHJ P,OPUT
JRST MDIL2
MDCSRC: PUSHJ P,MDCSR1
JUMPGE DSP,MDIL1A
MOVSI G,350700
HRRI E,LPDESC(D)
HRRI B,400001
JRST MDIL1A
MDCSR1: MOVSI DSP,-NSCOMS
DPB DSP,INPNT
CAMN T,SCOMS(DSP)
CAME TT,SCOMS2(DSP)
AOBJN DSP,.-2
POPJ P,
MD1DSP: JSP C,RDLNUL
PUSHJ P,RLD
JRST MD1CR
JRST MAKDLF
JFCL
JRST MDFF1
MOVEI C,"}"
JRST 4,.
JRST MDIL1B
;MDIL1B, MAKDLF, MAKDFF, MDFF2, MDFF3, MDCEOL, MD2DSP
MDIL1B: IDPB C,A
AOBJN B,.+2
PUSHJ P,OPUT
SOJA B,MDIL1
MAKDFF: TRNN B,-2
JRST MDFF2
MAKDLF: ADD G,[70000,,]
MOVEI C,15
JRST @2(DSP)
MDFF1: TRNE B,-2
JRST MAKDLF
MOVEI C,15
PUSHJ P,MDFIX
MOVEI C,14
MDFF2: JUMPE A,MDFF3
MOVEM A,OPNT
MOVE A,D
PUSHJ P,CLOSO
MOVE D,A
MDFF3: TRNN F,EOF
JRST MAKDOL
MOVE T,OBLK
MOVEM T,DIREND+1
PUSHJ P,GDIRX
TRO F,DIROK
TRZ F,FILLUZ
SKIPN @DSTFIL+4
TRO F,UPDTXT
JRST COPYX
MDCEOL: PUSHJ P,MDCSR1
TRNE B,-2
JUMPGE DSP,CPOPJ
MOVSI E,440700
HRRI E,LPDESC(D)
HRRI B,
POPJ P,
MD2DSP: JSP C,RDLNUL
PUSHJ P,RLD
JRST @INPNT
JRST MAKDLF
JFCL
JRST MAKDFF
MOVEI C,"}"
JRST 4,.
SOJA B,MDIL2A
;MD1CR, MD2CR, MD3CR, MD3CR1, MDIL3, MDCRCK, MDFIX
MD1CR: IBP INPNT
PUSHJ P,MDCEOL
MD2CR: PUSHJ P,MDFIX
MOVSI H,LSPC+NSPEC
MOVEI T,MD3CR
MOVEM T,INPNT
MD3CR: IDPB C,A
AOBJN B,.+2
PUSHJ P,OPUT
MOVEI C,12
IDPB C,A
AOBJN B,.+2
PUSHJ P,OPUT
HRRI B,1
SKIPA DSP,[MDCRCK]
MD3CR0: MOVEI DSP,MD2DSP
MD3CR1: GETCH2 H,G
MOVEI DSP,MD2DSP
JSP Q,SOSCK2
MDIL3: GETCH2 H,G
IDPB C,A
AOBJN B,MDIL3
PUSHJ P,OPUT
JRST MDIL3
MDCRCK: JSP C,RDLNUL
PUSHJ P,RLD
JRST MD3CR1
JRST MD3CR0
JFCL
JRST MDFF2
MOVEI C,"}"
MDFIX: MOVEI T,12
LEG IDPB C,E
LEG IDPB T,E
MOVEI T,177
LEG IDPB T,E
ADDI E,2
MOVSI T,DIRCOD
FSFIX E,T
LDB T,[2100,,B]
ADDI T,2
MOVEM T,2(D)
ADDM T,DIRSIZ
AOS PAGES
POPJ P,
;CREATE, CREAT2, CTEXT
CREATE: TRZ F,COPY
SKIPN @DSTFIL
JRST FLOSE
PUSHJ P,COPCHK
LDB T,[1400,,DATBLK]
HRRM T,@DSTFIL+1
MOVEI E,@DSTFIL
PUSHJ P,OPENO
SKIPE @DSTFIL+4
JRST CREAT2
MOVE A,[CTEXT,,OBUF]
BLT A,OBUF+LCTEXT-1
SETZM OBUF+LCTEXT
MOVE A,[OBUF+LCTEXT,,OBUF+LCTEXT+1]
BLT A,OBUF+377
MOVSI A,(<BYTE(7)14>)
MOVEM A,OBUF+200
OUTPUT DSKO,[-400,,OBUF-1↔0]
CREAT2: CLOSE DSKO,
MOVE A,[DSTFIL,,SRCFIL]
BLT A,SRCFIL+4
POPJ P,
CTEXT: ASCII/COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00003 ENDMK
C⊗;
/
LCTEXT←←.-CTEXT
;RDPAGE, RDPGOK, RDSPAG, RDPAG0
RDPAGE: TRZ F,UPDIR+WRITE+XPAGE+EDDIR
MOVE B,A
CAMGE A,DIRPAG
HRRO A,DIRPAG
CAMLE A,PAGES
HRRO A,PAGES
JUMPL A,RDPGLZ
AOS (P)
RDPGOK: CAMN A,FIRPAG
JRST RDSPAG
PUSHJ P,FNDPAG
JUMPN T,.+2
MOVEI T,DIR
MOVSI TT,D1BIT
IORM TT,2(T)
EXCH T,DIRP1#
JUMPE T,.+2
ANDCAM TT,2(T)
HRRZM A,FIRPAG
RDSPAG: MOVEI T,(A)
MOVE A,[440700,,C]
MOVEI C,1
PUSHJ P,NUMSTR
MOVEM C,HEDPAG
MOVEM C,HED2PG
PUSHJ P,CLRWR2
SETZM CHARS#
SETZM ROOM
SETZM RELPGN
MOVE A,FIRPAG
RDPAG0: SETZM LINES
TRNE A,-2
AOS CHARS ;FF ON MOST PAGES
MOVE B,A
PUSHJ P,FNDPAG
MOVEM A,CURPAG
MOVE D,T
EXCH T,DIRPT#
MOVSI TT,DPBIT
JUMPE T,.+2
ANDCAM TT,2(T)
IORM TT,2(D)
AOS TT,RELPGN#
DPB TT,[RPBYTE+2(D)]
MOVEI T,RLD
MOVEM T,RLDA#
CAMN B,DIRPAG
JRST DRGSET
JUMPE B,CPOPJ
CAMLE B,PAGES
POPJ P,
MOVEI DSP,RPDSP
SKIPN A,1(D)
JRST 4,.
PUSHJ P,SETI
;RDPAG2, RDPAG1, RDLINE, RDLLP, RDLTAB
TRNE F,FILLUZ
SKIPA T,[JSP Q,SOSTST]
RDPAG2: MOVE T,[SETZB B,TT]
MOVEM T,RDLINS#
HRRZ T,(D)
HRRZ T,1(T)
SUBI T,(A)
IMULI T,200*5
ADDM T,ROOM#
CAIG B,1
JRST RDPAG1
GETCHR
CAIE C,14
OUTSTR [ASCIZ /
DIRECTORY POINTER INVALID (NO PAGE MARK HERE) -- PROCEED WITH CAUTION
/]
RDPAG1: MOVSI H,LSPC+NSPEC
PUSHJ P,ENDSET
AOS T,A ;MAKE T +
MOVE G,INPNT
MOVEI D,PAGE#
MOVSI E,440700
HRRI E,LLDESC(A) ;SET UP FOR SSET2
ILDB C,G
SKIPGE CTAB(C)
XCT @CTAB(C)
DPB C,G ;IN CASE CLOBBERED BY SSET
ADD G,[70000,,]
CAIE C,12
JRST RDLINE
MOVEM G,NEWPNT
SOS IBLK
MOVE G,[441100,,[BYTE (9)15,200]]
RDLINE: HRRM A,(D)
LEG HRLZM D,(A)
RDLIN2: MOVSI E,440700
HRRI E,LLDESC(A)
XCT RDLINS ;SETZB B,TT OR JRST SOSTST
RDLLP: GETCH2 H,G
RDLLP2:
LEG IDPB C,E
AOJA B,RDLLP
RDLTAB:
LEG IDPB C,E
HRROI D,-10
IORI D,(B)
SUB B,D
ADDI TT,(D)
MOVEI T,40
JRST .+11(D)
REPEAT 10,<LEG IDPB T,E>
LEG IDPB C,E
AOJA TT,RDLLP
;RDLCR, RDLLF, NUMSTR
RDLCR0: MOVEI C,15
ADD G,[70000,,]
RDLCR: HRROI T,40
JUMPN B,.+2
LEG IDPB T,E
LEG IDPB C,E
GETCH2 H,G
RDLCR2: ADD G,[70000,,]
MOVEI C,12
RDLLF: JUMPGE T,RDLCR0
LEG IDPB C,E
TDZA C,C
LEG IDPB C,E
TLNE E,760000
JRST .-2
CAIL B,1000-2
JRST RDLONG
AOS LINES
ADDI TT,2(B)
ADDM TT,CHARS
DPB TT,[111100,,B]
HRRZM B,1(A)
AOS T,TXTNUM#
MOVEM T,2(A)
MOVEI D,(A)
MOVNI E,1(E)
ADDI E,LLDESC(A)
HRLI A,(E)
ADDI A,LLDESC+1
MOVEI T,1
IORM T,-1(A)
AOBJN A,.-1
MOVSI T,TXTCOD
FSFIX A,T
AOJA A,RDLINE
RDLONG: MOVE T,LLDESC(A)
CAME T,[ASCII /βββββ/]
CAMN T,[ASCID /βββββ/]
JRST RDLIN2
FATAL LINE MORE THAN 511 CHARS
NUMSTR: IDIVI T,=10
JUMPE T,.+4
HRLM TT,(P)
PUSHJ P,NUMSTR
HLRZ TT,(P)
ADDI TT,"0"
IDPB TT,A
POPJ P,
;RDLFF, RDLDON, LINSET, RPDSP, RDLNUL
RDLFF: JUMPN B,RDLFF2
RDLDON: HRRZS CHARS
PUSHJ P,ENDFIX
HRLM D,BOTSTR
MOVEI T,BOTSTR
HRRM T,(D)
MOVEM G,INPNT
TRNN F,EDDIR
PUSHJ P,DIRCHK
TRNE F,FILLUZ
PUSHJ P,INSDIR
LINSET: MOVE T,LINES
CAMGE T,ARRL
TLOA F,OFFEND
TLZ F,OFFEND
SUB T,SCRSIZ
ADDI T,3
ADD T,EXTRA
JUMPG T,.+3
MOVEI T,1
SETOM BOTWIN
EXCH T,WINMAX#
CAMN T,WINMAX
CAIG T,1
SETOM BOTWIN
POPJ P,
RDLFF2: MOVEI C,15
LEG IDPB C,E
JRST RDLCR2
PUSHJ P,RLD1
RPDSP: JSP C,RDLNUL
PUSHJ P,@RLDA
JUMPGE T,RDLCR
JRST RDLLF
JUMPGE T,RDLTAB
JUMPGE T,RDLFF
MOVEI C,"}"
RDLNUL: SKIPE (G)
JRST -3(C)
HRLI G,700
SKIPN 1(G)
AOJA G,.-1
JRST -3(C)
;RDPGLZ, SOSTST, SOSCHK, SOSCK2, PGMK, PGMK2
RDPGLZ: ANDI A,-1
TRNE F,DIROK
JRST RDPGOK
PUSH P,B
PUSHJ P,RDPGOK
PUSHJ P,FLSPAG
POP P,A
JRST RDPAGE
SOSTST: SETZB B,TT
SOSCHK: GETCH2 H,G
SOSCK2: MOVEI T,1
TDNN T,(G)
JRST 3(Q)
MOVE C,(G)
CAMN C,[ASCID / /]
JRST PGMK
AND C,[BYTE (7)160,160,160,160,160(1)1]
CAME C,[ASCID /00000/]
JRST 2,@[20000,,(Q)]
AOJA G,.+2
IBP G
SKIPGE (G)
PUSHJ P,RLD
JRST (Q)
PGMK: HRLI G,10700
SKIPGE (G)
PUSHJ P,RLD
PGMK2: ILDB C,G
CAIN C,14
JRST @5(DSP)
CAIN C,15
JRST PGMK2
JRST 1(Q)
;DIRCHK, DIRNEW, DIRNW2, DIRNW1, TXTSHF
DIRCHK: MOVE A,INPNT
SUB A,IBFPNT
ADD A,[70000,,]
JUMPGE A,.+2
SUB A,[XOR 1]
ROT A,-7
HRR A,IBLK
HRRZ E,@DIRPT
SKIPN 1(E)
JRST DIRNEW
CAME A,1(E)
OUTSTR [ASCIZ /
NEXT DIRECTORY POINTER INVALID -- PROCEED WITH CAUTION
/]
POPJ P,
DIRNEW: TRNN F,EOF
JRST DIRNW1
TRO F,DIROK
DIRNW2: MOVEM A,1(E)
POPJ P,
DIRNW1: MOVE T,DIRPT
CAIE E,DIREND
JRST DIRNW2
PUSHJ P,DIRADD
JRST DIRCHK
TXTSHF: PUSHJ P,LSTSHF
MOVE T,2(A)
TLNE T,ARRBIT
ADDM C,ARRLIN
TLNE T,WINBIT
ADDM C,WINLIN
JUMPGE T,CPOPJ
ADDI A,LLDESC+LPMTXT
MOVE T,1(A)
TRNN T,-1
HRRI T,XPLSTE
PUSHJ P,LSTSH1
SUBI A,LLDESC+LPMTXT
POPJ P,
;FNDLIN, FNDPAG, FNDLN1, FNDLN2, FNDLN3
FNDLIN: SKIPA T,[LPTRTB,,LPTRT2]
FNDPAG: MOVE T,[DPTRTB,,DPTRT2]
HLRM T,FNDPT1
HRRM T,FNDPT2
MOVE T,-1(T)
HRLOI TT,377777
MOVEM TT,FNDTM1#
FNDLN1: MOVEI TT,(A)
SUB TT,@FNDPT1
MOVM TT,TT
CAMGE TT,FNDTM1
SKIPN @FNDPT2 ;IGNORE IF PNTR NOT SET
AOBJN T,FNDLN1
JUMPGE T,FNDLN2
MOVEM TT,FNDTM1
MOVEM T,FNDTM2#
AOBJN T,FNDLN1
FNDLN2: MOVE T,FNDTM2
MOVEI TT,(A)
SUB TT,@FNDPT1
ADD T,FNDPT2
XCT (T)
JUMPE TT,CPOPJ
JUMPL TT,FNDLN3
HRRZ T,(T)
SOJG TT,.-1
POPJ P,
FNDLN3: HLRZ T,(T)
AOJL TT,.-1
POPJ P,
;REMPTR, FIXPTR, FNDPT1, FNDPT2, LPTRTB, DPTRTB
REMPTR: FOR @! X IN(ARR,WIN)
{ MOVSI TT,X!BIT
SKIPE T,X!LIN
ANDCAM TT,1(T)
SETZM X!LIN
} POPJ P,
FIXPTR: FOR @! X IN(ARR,WIN)
{ MOVE A,X!L
PUSHJ P,FNDLIN
MOVEM T,X!LIN
MOVSI TT,X!BIT
IORM TT,1(T)
} POPJ P,
IMPURE
FNDPT1: (T)
FNDPT2: @(T)
LPTRTB←←.
ARRL: 0
TOPWIN: 0
1
LINES: 0
LPTRTB-.,,
LPTRT2: HRRZ T,ARRLIN
HRRZ T,WINLIN
HRRZ T,PAGE
HLRZ T,BOTSTR
WINL←←TOPWIN ;FOR FIXPTR
DPTRTB←←.
CURPAG: 0
FIRPAG: 0
1
PAGES: 0
DPTRTB-.,,
DPTRT2: HRRZ T,DIRPT
HRRZ T,DIRP1
HRRZ T,DIR
HLRZ T,DIREND
PURE
;DIRGET, DIRGL, DGEND, DRGSET
DIRGET: HRRZ T,DIR
MOVEM T,DIRGPT# ;BETTER THE HELL NOT CAUSE SHUFFLAGE
SETZM DIRGPG#
MOVE C,[170700,,DIRHED+3]
MOVEM C,INPNT
MOVE C,PAGES
PUSHJ P,NUM5
MOVE C,[440700,,DIRHED]
JSP Q,RLDX
SKIPE VBUF
SKIPA C,[440700,,VBUF]
MOVE C,[440700,,[BYTE (7)15,12,177]]
JSP Q,RLDX
MOVE C,[440700,,DIRHD2]
DIRGL: JSP Q,RLDX
MOVE C,[350700,,DIRTXT]
MOVEM C,INPNT
MOVE C,DIRGPT
HRRZ C,1(C)
PUSHJ P,NUM5
IBP INPNT
AOS C,DIRGPG
CAMLE C,PAGES
JRST DGEND
PUSHJ P,NUM5
MOVE C,[440700,,DIRTXT]
JSP Q,RLDX
HRRZ C,DIRGPT
HRRZ Q,(C)
MOVEM Q,DIRGPT
ADD C,[440700,,LPDESC]
JRST DIRGL
DGEND: MOVEI C,177
IDPB C,INPNT
TRNN F,DIROK
SKIPA C,[440700,,DIRUNK]
MOVE C,[440700,,DIRTXT]
JSP Q,RLDX
MOVE C,[440700,,DIREMK]
JSP Q,RLDX
SUB P,[1,,1]
XCT -1(DSP)
DRGSET: MOVEI Q,DIRGET
TRO F,EDDIR
MOVEI DSP,DGDSP
PUSHJ P,SETRLD
MOVEI A,1
JRST RDPAG2
;NUM5, NUM5A, DIRHED, DIRTXT, DIREMK, DGDSP
NUM5: HRLI C,12*12*12*12*12/2
NUM5A: PUSH P,D
IDIVI C,12
TLNE C,-1
PUSHJ P,NUM5A
ADDI D,"0"
IDPB D,INPNT
POP P,D
POPJ P,
IMPURE
DIRHED: ASCII /COMMENT ⊗ VALID XXXXX PAGES/
BYTE (7)177
DIRHD2: ASCII /C REC PAGE DESCRIPTION
/
BYTE (7)177
DIRTXT: ASCII /Cxxxxx xxxxx/
BYTE (7)177
DIREMK: ASCII /ENDMK
C⊗;
/
BYTE (7)177
XDIRCH←←=77 ;# CHARS IN FIRST 2 & LAST LINES
VBUF: BLOCK 10
PURE
DIRUNK: ASCII /
AND WHO KNOWS HOW MANY MORE . . .
/
BYTE (7)177
JRST RDLDON
DGDSP: JSP C,[JRST -3(C)]
PUSHJ P,(Q)
JRST RDLCR
JRST RDLLF
JRST RDLTAB
JRST 4,.
JRST 4,.
;OUTDIR, OUTDOK, OUTDLP, ODDSP, ODDON, ODEXP
OUTDIR: TRNN F,REDNLY
SKIPN DIRPAG
POPJ P,
MOVE A,DIRSIZ
ADDI A,200*5-1+200*5 ;+1 TO GET REC #
IDIVI A,200*5
MOVEM A,NEWSIZ
HRRZ B,@DIR
HRRZ B,1(B) ;START OF PG 2
CAILE A,(B)
JRST ODEXP
OUTDOK: MOVEI E,EDFIL
PUSHJ P,OPENW
MOVEI A,1
PUSHJ P,SETO
MOVEI DSP,ODDSP
MOVEI Q,DIRGET
PUSHJ P,SETRLD
ODOLP: MOVE G,OPNT
MOVE E,OCNT
OUTDLP: GETCHR
IDPB C,G
SOJG E,OUTDLP
PUSHJ P,WRBUF
JRST ODOLP
JRST ODDON
ODDSP: JSP C,[JRST -3(C)]
PUSHJ P,(Q)
ODDON: MOVNI T,1
PUSHJ P,WRCHK
CAME T,DIRSIZ
FATAL DIRECTORY WRITER LOST
MOVEM T,ODSIZ
MOVEM G,OPNT
PUSHJ P,CLOSO
HRRZ T,@DIR
HRRZ T,1(T)
SUB T,NEWSIZ
JUMPLE T,CPOPJ
MOVE A,[OBUF-1,,OBUF]
BLT A,OBUF+177
PUSHJ P,WRBUF
SOJG T,.-1
POPJ P,
ODEXP: TRNE F,WRITE
JRST 4,.
MOVEI A,
JRST WRPX0
;INSDIR, DCLP1, DCLP2, DCNG, INSDL
INSDIR: TRNE F,EDDIR
POPJ P,
HRRZ D,PAGE
MOVE A,DIRP1
SKIPE XPAGES
JRST INSD3
INSD1: PUSH P,A
ADD D,[440700,,LLDESC]
MOVE T,1-LLDESC(D)
TRNN T,777000
JRST IDNUL
TRNN T,777
HRLI D,350700
MOVEI DSP,IDDSP
MOVE A,[440700,,T]
SETZB T,TT
MOVNI B,8
PUSH P,D
DCLP1: ILDB C,D
CAIL C,140
SUBI C,40
IDPB C,A
CAILE C,40
AOJL B,DCLP1
JUMPGE B,DCNG
MOVEI G,8+1(B)
MOVE H,CTAB(C)
TLNE H,LSPC
XCT IDDSP0-2(H)
DCLP1A: MOVSI B,-NSCOMS
DPB B,A
DCLP2: CAMN T,SCOMS(B)
CAME TT,SCOMS2(B)
AOBJN B,DCLP2
DCNG: POP P,T
JUMPL B,.+2
TDZA B,B
SKIPA B,G
MOVE D,T
MOVSI E,DSPC+LSPC+NSPEC
MOVE A,[700,,BUF-1]
MOVEI C,11
IDPB C,A
INSDL: ILDB C,D
TDNE E,CTAB(C)
XCT @CTAB(C)
IDPB C,A
AOJA B,INSDL
;IDDSP0, IDDSP, IDTAB, INSD3, INSD4, SCOMS, SCOMS2
IDDSP0: ADD D,[70000,,]
JRST 4,.
JRST IDTAB0
JRST 4,.
IDDSP: JRST 4,.
JRST 4,.
JRST IDDON
JRST 4,.
JRST IDTAB
JRST 4,.
JRST 4,.
JRST 4,.
AOJA B,INSDL
IDTAB0: SUBI G,8+1+1
IBP D
AOJL G,.-1
JRST DCLP1A
IDTAB: IDPB C,A
HRLS B
TLO B,-10
IBP D
AOBJN B,.-1
IBP D
JRST INSDL
INSD3: PUSHJ P,INSD1
TLO F,NOSHUF
HRRZ A,@DIRP1
HRRZ D,XPLST
INSD4: PUSH P,A
PUSH P,D
HRRZ D,-LLDESC-LPMTXT(D)
PUSHJ P,INSD1
POP P,D
POP P,A
HRRZ A,(A)
HRRZ D,(D)
JUMPN D,INSD4
TLZ F,NOSHUF
POPJ P,
SCOMS: ASCII/COMME/
ASCII/SUBTT/
NSCOMS←←.-SCOMS
SCOMS2: ASCII/NT/
ASCII/L/
;IDNUL, IDDON, IDDONS
IDNUL: MOVE A,[700,,BUF-1]
MOVEI C,15
IDDON: IDPB C,A
MOVEI B,1
FOR X IN(12,177){MOVEI C,X↔IDPB C,A↔}
TLNE A,760000
AOJA B,.-2
MOVEI E,-BUF+1(A)
MOVEI C,LPDESC(E)
IMULI E,5
SUB E,B
POP P,A
HRRZ T,2(A)
SUBM E,T
ADDM T,DIRSIZ
HLL E,2(A)
HRRZ B,-1(A)
CAIN C,-2(B)
JRST IDDONS
CAIL C,-2(B)
TLO F,NOCHK
MOVE B,C
PUSH P,1(A)
MOVE T,(A)
PUSH P,T
HRLM P,(T)
MOVS T,T
HRRM P,(T)
PUSHJ P,FSGIVE
TLZ F,NOCHK
PUSHJ P,FSGET
MOVSI T,DIRCOD
HLLM T,-1(A)
POP P,T
MOVEM T,(A)
HRLM A,(T)
MOVS T,T
HRRM A,(T)
POP P,1(A)
JUMPGE E,.+2
MOVEM A,DIRPT
TLNE E,D1BIT
MOVEM A,DIRP1
IDDONS: MOVEM E,2(A)
MOVSI T,BUF
HRRI T,LPDESC(A)
ADDI C,(A)
BLT T,-1(C)
POPJ P,
;DIRSET, DIRST1, DIRUP, DIRUP1, DIRUP2, DIRUP3
DIRSET: HRRZ A,DIRP1
HRRZ T,1(A)
DIRST1: HLLZ TT,1(B)
ROT TT,8
TLNE TT,-1
ADDI TT,1
ADDI T,(TT)
HRRZ A,(A)
CAME T,1(A)
TRO F,UPDIR
MOVEM T,1(A)
HRRZ B,(B)
JUMPN B,DIRST1
POPJ P,
DIRUP: SKIPN B,DPLST#
JRST DIRUP2
DIRUP1: MOVEI A,(B)
HRRZ B,(A)
PUSHJ P,FSGIVE
CAIE B,DPLST
JRST DIRUP1
SETZM DPLST
DIRUP2: HRRZ A,DIRP1
MOVEI B,1
DIRUP3: DPB B,[RPBYTE+2(A)]
SKIPGE 2(A)
POPJ P,
HRRZ A,(A)
AOJA B,DIRUP3
;DIRFIX, DIRFX1, DIRFX2, DIRFX3, DIRFX4, DIRFXN
DIRFIX: HRRZ A,DIRP1
TLO F,NOSHUF
SKIPN B,DPLST
JRST DIRFX4
DIRFX1: HLLZ T,2(A)
TLNN T,RPMASK
PUSHJ P,DIRFXN
TLZ T,¬RPMASK
CAML T,2(B)
JRST DIRFX3
SKIPGE 2(A)
JRST DIRFX2
HRRZ A,(A)
JRST DIRFX1
DIRFX2: MOVSI T,DPBIT
ANDCAM T,2(A)
IORM T,2(B)
HRRZM B,DIRPT
HRRZ A,(A)
DIRFX3: HLL A,(A)
HRRZ T,(B)
MOVEM A,(B)
HRLM B,(A)
MOVS A,A
HRRM B,(A)
HRRZ A,2(B)
ADDI A,=12
ADDM A,DIRSIZ
AOS CURPAG
AOS PAGES
MOVEI A,(B)
MOVEI B,(T)
CAIE B,DPLST
JRST DIRFX1
SETZM DPLST
DIRFX4: HLLZ T,2(A)
TLNN T,RPMASK
PUSHJ P,DIRFXN
HRRZ A,(A)
JUMPGE T,DIRFX4
TLZ F,NOSHUF
POPJ P,
DIRFXN: PUSHJ P,DELPG1
HLRZ C,(A)
PUSHJ P,FSGIVE
MOVEI A,(C)
HLLZ T,2(A)
POPJ P,
;DISPLAY DATA STORAGE
IMPURE
NLINES: =40
=42
SCRTOP: 2
PPSIZ: 3
LINMAX: =21+2+LLDESC
ARRPOS: 0
CW 1,46,3,1,3,1
BYTE(11)<-24>,0(3)0,0(2)0,2(4)6
AR2POS: 0
CW 1,66,3,1,3,1
BYTE (11)<-24>,0(3)0,0(2)0,2(4)6
ARPOS2: 0
CW 1,46,3,1,3,1
BYTE (11)<-14>,0(3)0,0(2)0,2(4)6
ARRBUF: BLOCK 5
FIRWRD: CW 1,46,2,0,3,2
0
DISPI: 0
JRST TDISP
PPINFO RBUF
PPINFO RBUF
WIPI: 0
POPJ P,
PUSH P,A
JRST IWIPE
DBLTI: 0
LDB T,[300700,,DPYTAB(G)]
JRST DBLT2
PCOMP: POPJ P, ;MUST BE REASONABLE INSTR FOR TTYS
JRST PCOMPD
JRST PCOMPI
P2COMP: POPJ P, ; "
JRST P2CMPD
JRST P2CMPI
;MORE DISPLAY STORAGE
DISPXA: 0
DDISPX
IDISPX
DISP1A: 0
DDISP
IDISP
DISP2I: 0
TRNE F,EDITM
JRST DISP3
LEPREP: 0
PUSHJ P,LEADJ
JFCL
LETST: 0
CAIG T,=84
JFCL
SPCOUT: 0
PUSH H,[CW 1,46,1,46,1,46]
JFCL
DPYHED: SETZ DPYBUF
0
DDACT: 0
DPYBUF: BLOCK DPYBSZ
100,,
DPYTAB: BLOCK MAXLIN
DPYLOC: BLOCK MAXLIN
MASK: 0
CW(0,377,7,0,0,377)+3
BYTE(11)3777,0(3)7,0(2)3,0(4)17
BRKTAB: BLOCK 4
;HEADERS & TRAILERS
LTPSTR+2
TOPSTR: BLOCK 2
,-1
ASCID/************ PAGE /
HEDPAG: BLOCK 1
HEDNAM: BLOCK 6
ROFLG: BLOCK 1
ASCID/ ************ /
WFLAG: BLOCK 1
ASCID /
/
LTPSTR←←.-TOPSTR
LTPDSH+2
TOPDSH: BLOCK 2
,-2
ASCID/---- PAGE /
HED2PG: BLOCK 1
HED2NM: BLOCK 6
ROFLG2: BLOCK 1
ASCID/ ---- /
WFLAG2: BLOCK 1
ASCID /
/
LTPDSH←←.-TOPDSH
LBTSTR+2
BOTSTR: .
0
,-3
ASCID/************************
/
LBTSTR←←.-BOTSTR
PURE
LBTDSH+2
BOTDSH: BLOCK 2
,-4
ASCID/--------
/
LBTDSH←←.-BOTDSH
LDOTS+2
DOTS: BLOCK 2
,-5
ASCID / . . .
/
LDOTS←←.-DOTS
;DPYINI, DPYCHK
DPYINI: SETOM TTYNUM
SETOM DPY
MOVEI T,"→"*2+1
MOVEM T,ARRON#
DPYCHK: PUSH P,A
MOVNI A,1
GETLIN A
MOVEI DSP,
TLNE A,DD
MOVEI DSP,1
TLNE A,III
MOVEI DSP,2
HRRZS A
CAMN A,TTYNUM
JRST POPAJ
TRO F,DSPALL
CAMN DSP,DPY
JRST POPAJ
PUSH P,B
PUSH P,T
PUSH P,TT
MOVEM DSP,DPY#
MOVEM A,TTYNUM#
MOVE T,WIPI+1(DSP)
MOVEM T,WIPI
MOVE T,DISPI+1(DSP)
MOVEM T,DISPI
SETZM LSTARR#
SETZM LSTPAG#
SOJL DSP,NODPY
SETACT [BRKTAB,,]
MOVEI T,SUPCCR
IORM T,BRKTAB+3
SETACT [BRKTAB]
MOVE T,FIRWRD(DSP)
MOVEM T,DPYBUF
FOR X IN(ARRPOS,AR2POS,PCOMP,P2COMP,DISPXA,DBLTI,LEPREP,DISP1A,<DISP2I>
,LETST,SPCOUT,ARPOS2,MASK)
{ MOVE T,X+1(DSP)
MOVEM T,X
}
;DPYI2, NODPY, WIPE, IWIPE
DPYI2: MOVE G,NLINES(DSP)
SUB G,PPSIZ
MOVEM G,PPPOS#
PUSHJ P,P2COMP
HRRZM T,DPPPOS#
MOVE T,PPSIZ
LSH T,9
TRO T,1
MOVEM T,DPPSIZ#
PUSHJ P,PPSET
MOVE B,PPPOS
MOVE A,SCRTOP
SUB B,A
PUSHJ P,SETSCR
MOVE T,[DPYTAB-1,,DPYTAB]
BLT T,DPYTAB+MAXLIN-1
TRO F,DSPALL
PUSHJ P,WIPE
POP P,TT
POP P,T
JRST POPBAJ
NODPY: SKIPL SRCFIL+1
JRST NODPY2
OUTSTR [ASCIZ /EDITING /]
MOVEI D,EDFIL
PUSHJ P,FILTYP
TYPCHR "
"
NODPY2: OUTSTR[ASCIZ /UGH, NO DISPLAY. GOOD LUCK!
/]
AOJA DSP,DPYI2
WIPE: XCT WIPI
PUSH P,B
MOVE H,[-DPYBSZ+1,,DPYBUF]
PUSH H,POSWRD
SETZM BLNKL
SKIPE DDACT
DPYOUT [0↔0]
MOVE G,SCRTOP
PUSHJ P,WIPIT
PUSHJ P,DDCOP ;CAN'T POSSIBLY SKIP
MOVEI G,10000
IORM G,DPYBUF+1(TT)
MOVE B,TT
MOVEI H,DPYBUF-1-1(T)
PUSHJ P,DDCOP
MOVEI G,20000
ADDM G,DPYBUF+1(TT)
ADD TT,B
ADDM G,DPYBUF+1(TT)
SETOM OLDARR
JRST DISPX
IWIPE: PGCLR
POPJ P,
;SETSCR, NMVARR, MOVARR, SETARR
SETSCR: MOVEM A,SCRTOP
MOVEM B,SCRSIZ#
LSH B,-1
SOJ B,
MOVEM B,GTDEL#
SETZM BLNKL
MOVE G,A
PUSHJ P,PCOMP
MOVEM T,POSWRD#
SKIPN PAGE
POPJ P,
PUSHJ P,LINSET
MOVEI A,1
JRST SETWIN
TRC T,SBKWDS
NMVAR1: AOS (P)
NMVARR: MOVNS A
MOVARR: ADD A,ARRL
SETARR: MOVE T,LINES
CAIGE A,1
MOVEI A,1
CAILE A,1(T)
MOVEI A,1(T)
CAILE A,(T)
TLOA F,OFFEND
TLZ F,OFFEND
PUSHJ P,FNDLIN
MOVEM A,ARRL
CAME A,SRCL
SETZM SRCOFF
MOVSI TT,ARRBIT
EXCH T,ARRLIN#
JUMPE T,.+2
ANDCAM TT,1(T)
MOVE T,ARRLIN
IORB TT,1(T)
TLNE TT,PMARK
TLOA F,PMLIN
TLZ F,PMLIN
TRNE TT,777
TLZA F,NULLIN
TLO F,NULLIN
POPJ P,
;ARRBOT, ARRTOP, SETWIN, WINCHK, WINCH2
ARRBOT: SUB A,SCRSIZ
ADDI A,3+4+4
ARRTOP: SUBI A,4
SETWIN: CAMLE A,WINMAX
MOVE A,WINMAX
CAIG A,1
SKIPA A,[1]
SKIPA B,[TOPDSH]
MOVEI B,TOPSTR
MOVEM B,HEDBLK#
CAME A,WINMAX
SKIPA B,[BOTDSH]
MOVEI B,BOTSTR
MOVEM B,TRLBLK#
CAME A,TOPWIN
TRO F,DSPSCR
PUSH P,A
ADD A,SCRSIZ
SUB A,EXTRA
SUBI A,3
CAMLE A,LINES
MOVE A,LINES
AOJ A,
MOVEM A,BOTWIN#
POP P,A
MOVEI T,-1(A)
SUB T,SCRTOP
MOVNM T,OFFSET#
PUSHJ P,FNDLIN
MOVEM A,TOPWIN
MOVSI TT,WINBIT
SKIPE B,WINLIN
ANDCAM TT,1(B)
MOVEM T,WINLIN#
IORM TT,1(T)
POPJ P,
WINCHK: MOVE A,ARRL
CAMGE A,TOPWIN
JRST ARRTOP
WINCH2: CAML A,BOTWIN
JRST DWNWIN
POPJ P,
;DISP, DISP0, DISP1, DISP2
DISP: PUSH P,A
PUSH P,B
TRNN F,EDITM
PUSHJ P,LECLR
PUSHJ P,WINCHK
XCT @-2(P)
AOSA -2(P)
JRST PPBAJ1
XCT DISPI ;PPINFO RBUF OR JRST TDISP
MOVE T,RBUF+2
TLNE T,200000
TRO F,DSPALL
HLRZ T,RBUF+3+1
TRNE T,2000
IORI T,-2000
CAIN T,@DPPPOS
SOSE RBUF+1
TROA F,DSPALL
JRST .+2
PUSHJ P,PPSET
MOVE H,[-DPYBSZ+1,,DPYBUF]
MOVE T,[2200,,RBUF-1]
MOVEM T,POSLST#
TRNN F,DSPALL
JRST @DISP1A
SKIPE DDACT
DPYOUT [0↔0]
DISP2: MOVE G,SCRTOP
PUSH H,POSWRD
IDPB H,POSLST
HRRZM H,DPYLOC(G)
MOVE A,HEDBLK
MOVEI B,1
PUSHJ P,DBLT
MOVE B,ARRL
SUB B,TOPWIN
MOVE A,WINLIN
JUMPLE B,.+2
PUSHJ P,DBLT
TRNE F,ATTMOD
JRST DISPAT
XCT DISP2I
SKIPA T,AR2POS
MOVE T,ARRPOS
PUSH H,T
MOVE T,ARRON
PUSH H,T
DPB T,[271000,,DPYTAB(G)]
;FALLS THRU
;DISP3, DISP4, DISP5, DUMMY, EXCLR, EXSET,EXTST
DISP3: TRNE F,EDITM
JRST DISP5
DISP3A: TLNE F,OFFEND
JRST [MOVE A,TRLBLK↔PUSHJ P,DBLT2↔JRST @DISPXA]
PUSHJ P,DBLT2
DISP4: MOVE B,BOTWIN
SUB B,ARRL
PUSHJ P,DBLT3
MOVE A,TRLBLK
PUSHJ P,DBLT
JRST @DISPXA
DISP5: PUSHJ P,LESET
XCT SPCOUT
PUSH H,[ASCID /
/]
HLLZS DPYTAB(G)
AOJ G,
HRRZM H,DPYLOC(G)
MOVEM G,DPYCLB#
MOVEI A,DUMMY
SKIPE B,EXTRA
PUSHJ P,DBLT
XCT SPCOUT
TLNE F,OFFEND
JRST @DISPXA
HRRZ A,@ARRLIN
JRST DISP4
LLDESC+1+2
DUMMY: .,,.
2000
,-5
ASCID /
/
EXTST: XCT LETST
EXCLR: TDZA T,T
MOVEI T,1
EXSET: CAMN T,EXTRA
POPJ P,
MOVEM T,EXTRA#
TRO F,DSPSCR
MOVSI TT,WINBIT
SKIPE T,WINLIN
ANDCAM TT,1(T)
SETZM WINLIN
SETOM BOTWIN
JRST LINSET
;DISPAT, DISPAX
DISPAT: HRRZ A,ATTBUF#
MOVE B,ATTNUM#
CAILE B,ATTMAX
MOVEI B,ATTMAX/2
PUSH P,DBLTI
MOVE T,[JRST DBLT4]
MOVEM T,DBLTI
PUSH P,ARRPOS
MOVE T,ARPOS2
MOVEM T,ARRPOS
PUSHJ P,DBLT
MOVE T,ATTNUM
CAIG T,ATTMAX
JRST DISPAX
PUSH H,ARRPOS
MOVE T,[ASCID / . /]
PUSH H,T
DPB T,[271000,,DPYTAB(G)]
PUSH H,[ASCID /. .
/]
AOJ G,
HRRZM H,DPYLOC(G)
MOVSI B,-ATTMAX+ATTMAX/2+1
MOVEI A,ATTBUF
HLRZ A,(A)
AOBJN B,.-1
PUSHJ P,DBLT
DISPAX: POP P,ARRPOS
POP P,DBLTI
TLNE F,OFFEND
SKIPA A,TRLBLK
HRRZ A,ARRLIN
PUSHJ P,DBLT
TLNE F,OFFEND
JRST @DISPXA
JRST DISP4
;DWNWIN, REWIN, DDISPX, DDSPX2, DDDONE, WIPIT, WIPL, WIPL2
DWNWIN: CAMLE A,LINES
SOJA A,WINCH2
SKIPGE T,BOTWIN
JRST REWIN
SUBI A,(T)
ADD A,TOPWIN
ADDI A,4
JRST SETWIN
REWIN: MOVE A,TOPWIN
PUSHJ P,SETWIN
MOVE A,ARRL
JRST WINCH2
DDISPX: PUSHJ P,WIPIT
MOVE A,ARRL
ADD A,OFFSET
MOVEM A,OLDARR
DDSPX2: MOVEI T,
IDPB T,POSLST
PUSHJ P,DDCOP
JRST DDDONE
DPYOUT DPYHED
DPYOUT [0↔0]
DDDONE: PUSHJ P,LINREL
TRZ F,DSPSCR+DSPALL
SKIPE T,DPYCLB
HLLZS DPYTAB(T)
SETZM DPYCLB
JRST DISPX
WIPIT: MOVE T,G
SUB T,SCRTOP
SUB T,SCRSIZ
SUB T,BLNKL
ADDM T,BLNKL#
JUMPGE T,CPOPJ
HRL G,T
WIPL: MOVSI T,40
EXCH T,DPYTAB(G)
TLNN T,17700
JRST WIPL2
PUSH H,ARRPOS
WIPL2: PUSH H,[ASCID /
/]
AOBJN G,WIPL
POPJ P,
;DDCOP, DDLUZ, LINREL, LINRLL, IDISP, IDISP2
DDCOP: MOVEI TT,-DPYBUF(H)
CAIL TT,DPYBSZ/2-1
JRST DDLUZ
AOS T,H
HRLI H,DPYBUF+1
LSH T,1
SUBI T,DPYBUF+1
BLT H,-1(T)
SETZM (T)
SUBI T,DPYBUF-1
HRRZM T,DPYHED+1
POPJ P,
DDLUZ: SETZB TT,1(H)
SUBI H,DPYBUF-1-1
HRRZM H,DPYHED+1
JRST POPJ1
LINREL: MOVEI G,10000
MOVE T,[2200,,RBUF-1]
LINRLL: ILDB H,T
JUMPE H,CPOPJ
ADDI H,(TT)
ADDM G,(H)
JRST LINRLL
IDISP: TRNE F,DSPSCR
JRST DISP2
TRNE F,ATTMOD
JRST IDISP2
PUSHJ P,IIIARR
JRST POPBAJ
IDISP2: MOVE G,ARRL
ADD G,OFFSET
CAME G,OLDARR
JRST DISP2
JRST POPBAJ
;IIIARR, IIIAR2, IIIAR3
IIIARR: MOVE G,ARRL
ADD G,OFFSET
MOVEM G,OLDARR
TRNN F,EDITM!ATTMOD
JRST IIIAR2
TRNE F,ATTMOD
JRST [MOVNI G,20↔JRST IIIAR2]
PUSHJ P,LESET
JFCL
TLNE F,NULLIN
TLNE F,OFFEND
JRST IIIAR3
IIIAR2: PUSHJ P,PCOMPI
TLOE F,ARRPG
JRST IIIAR4
MOVEM T,ARRBUF+1
MOVE T,ARRPOS
MOVEM T,ARRBUF+2
MOVE T,ARRON
MOVEM T,ARRBUF+3
DPYOUT 1,[ARRBUF↔5]
POPJ P,
IIIAR3: TLZE F,ARRPG
PGSEL 0
HRRZ TT,DPYLOC(G)
MOVE T,[ASCID /
/]
UPGMVM T,1(TT)
HRRZ T,DPYLOC+1(G)
CAIN T,1(TT)
JRST IIIAR2
MOVSI T,1(T)
HRRI T,20
UPGMVM T,2(TT)
JRST IIIAR2
IIIAR4: UPGMVM T,ARRBUF+1
MOVE T,ARRON
CAME T,ARRBUF+3
UPGMVM T,ARRBUF+3
MOVEM T,ARRBUF+3
POPJ P,
;LESET, LEADJ, LECLR
LESET: PUSHJ P,P2COMP
ADDI T,4000
CAMN T,LEPOS
JRST POPJ1
MOVEM T,LEPOS#
LEYPOS (T)
TLNN F,NULLIN
AOSA (P)
INSKIP
POPJ P,
JRST POPJ1
LEADJ: SKIPE LEPOS
POPJ P,
MOVE G,ARRL
ADD G,OFFSET
PUSHJ P,LESET
POPJ P,
POPJ P,
LECLR: SKIPE LEPOS
LEYPOS
SETZM LEPOS
POPJ P,
;DBLT, DBLT1, DBLT2, DBLT3, IDISPX, DISPX, PPBAJ1, POPBAJ, POPAJ
DBLT: XCT DBLTI
JUMPE T,DBLT2
MOVE T,[ASCID / /]
DBLT1: PUSH H,ARRPOS
PUSH H,T
DPB T,[271000,,DPYTAB(G)]
DBLT2: HRRZ T,2(A)
HRRM T,DPYTAB(G)
HRRZ TT,-1(A)
SKIPGE 1(A)
SUBI TT,2
CAMLE TT,LINMAX
HRRO TT,LINMAX
MOVSI T,LLDESC(A)
HRRI T,1(H)
ADDI H,-2-LLDESC(TT)
BLT T,(H)
JUMPGE TT,.+2
PUSH H,[ASCID /
/]
AOJ G,
HRRZ A,(A)
HRRZM H,DPYLOC(G)
DBLT3: SOJG B,DBLT
POPJ P,
DBLT4: MOVEI T,"|"*2+1
JRST DBLT1
IDISPX: PUSHJ P,IIIARR
TRZ F,DSPSCR+DSPALL
SETZM 1(H)
SUBI H,DPYBUF-1-1
HRRZM H,DPYHED+1
DISPX: DPYOUT DPYHED
TLZA F,ARRPG
PPBAJ1: AOS -2(P)
POPBAJ: POP P,B
POPAJ: POP P,A
POPJ P,
;PCOMPD, PCOMPI, PCOMPS, P2CMPD, P2CMPI
PCOMPD: MOVEI T,14
IMUL T,G
DPB T,[400400,,T]
TRZ T,17
ROT T,20
TRO T,<CW 4,0,4,0,5,0>
POPJ P,
PCOMPI: MOVE T,[-30⊗16]
IMUL T,G
ADD T,[BYTE(11)<-1000>,770(3)2,2(2)1,2(4)6]
POPJ P,
PCOMPS: PUSHJ P,PCOMPD
PUSH H,T
IDPB H,POSLST
POPJ P,
P2CMPD: MOVEI T,1(G)
LSH T,7
IDIV T,[-5]
ADDI T,1000
POPJ P,
P2CMPI: MOVEI T,(G)
IMUL T,[-30]
ADDI T,770
POPJ P,
;DDISP, DDISP2
DDISP: TRNE F,DSPSCR
JRST DDISPS
MOVE A,ARRL
ADD A,OFFSET
CAMN A,OLDARR
JRST DDISP2
TRNE F,ATTMOD
JRST DDISPS
EXCH A,OLDARR#
PUSH P,A
HRROI B,OFFARR
CAML A,OLDARR
HRROI B,ONARR
SUB A,OFFSET
PUSHJ P,FNDLIN
PUSH P,T
SKIPE DDACT
DPYOUT [0↔0]
PUSHJ P,DOARR
TRC B,OFFARR≠ONARR
PUSHJ P,DOARR
SUB P,[2,,2]
JRST DDSPX2
DDISP2: TRNN F,EDITM
JRST POPBAJ
SKIPE DDACT
DPYOUT [0↔0]
MOVE G,A
PUSHJ P,DOAR2
JRST POPBAJ
;DOARR, DOAR2, OFFARR, ONARR
DOARR: SKIPGE G,@(B)
POPJ P,
PUSHJ P,PCOMPS
TRNE F,EDITM
SKIPL 1(B)
SKIPA T,ARRPOS
MOVE T,AR2POS
PUSH H,T
MOVE T,@2(B)
PUSH H,T
DPB T,[271000,,DPYTAB(G)]
MOVE A,@1(B)
TRNE F,EDITM
SKIPL 1(B)
AOJA B,DBLT2
DOAR2: PUSHJ P,LESET
PUSH H,[CW 1,46,1,46,1,46]
PUSH H,[ASCID /
/]
HLLZS DPYTAB(G)
AOJ G,
MOVEM G,DPYCLB
POPJ P,
OFFARR: ,-2(P) ;BOY DOES FAIL EVER EAT IT!
,-1(P)
[ASCID/ /]
ONARR: OLDARR
SETZ ARRLIN
ARRON
;DDISPS, DDSPS2, DDSPS3, DDSPSX, DDSPS4
DDISPS: MOVE G,SCRTOP
PUSH P,C
PUSH P,D
SETOB C,D
SKIPE DDACT
DPYOUT [0↔0]
MOVE A,HEDBLK
HRROI B,[ASCID/ /]
PUSHJ P,DBLTS
MOVE C,ARRL
SUB C,TOPWIN
MOVE A,WINLIN
JUMPLE C,.+2
PUSHJ P,DBLTS
HRROI B,ARRON
TRNE F,EDITM!ATTMOD
JRST DDSPS4
DDSPS2: TLNE F,OFFEND
JRST DDSPSX
PUSHJ P,DBLTS
HRROI B,[ASCID / /]
DDSPS3: MOVE C,BOTWIN
SUB C,ARRL
PUSHJ P,DBLTS3
DDSPSX: MOVE A,TRLBLK
PUSHJ P,DBLTS
POP P,D
POP P,C
JRST DDISPX
DDSPS4: TRNE F,ATTMOD
JRST DSPSAT
PUSHJ P,LESET
SKIPA TT,ARRPOS
MOVE TT,AR2POS
PUSH P,TT
PUSH P,D
PUSHJ P,DBLTA
MOVEM G,DPYCLB
HRROI B,[ASCID / /]
SKIPE C,EXTRA
PUSHJ P,DBLTA
POP P,T
CAME T,D
PUSH H,[CW 1,46,1,46,1,46]
SUB P,[1,,1]
TLNE F,OFFEND
JRST DDSPSX
HRRZ A,(A)
JRST DDSPS3
;DSPSAT, DSPSAX
DSPSAT: HRRZ A,ATTBUF
MOVE C,ATTNUM
CAILE C,ATTMAX
MOVEI C,ATTMAX/2
HRROI B,["|"*2+1]
PUSHJ P,DBLTS
MOVE T,ATTNUM
CAIG T,ATTMAX
JRST DSPSAX
HRROI B,[ASCID / /]
MOVEI A,DOTS
PUSHJ P,DBLTS
MOVSI C,-ATTMAX+ATTMAX/2+1
MOVEI A,ATTBUF
HLRZ A,(A)
AOBJN C,.-1
HRROI B,["|"*2+1]
PUSHJ P,DBLTS
DSPSAX: HRRZ A,ARRLIN
HRROI B,[ASCID / /]
JRST DDSPS2
;DBLTS, DBLTS2, DBLTSN, DBLTS3, DBLTS1, DBLTSA, DBLTA, DBLTA2
DBLTS: LDB T,[271000,,DPYTAB(G)]
CAIE T,@(B)
JRST DBLTS1
HRRZ T,2(A)
CAIN T,@DPYTAB(G)
AOJA G,DBLTSN
CAIE G,(D)
PUSHJ P,PCOMPS
DBLTS2: PUSHJ P,DBLT2
AOJ B,
SKIPA D,G
DBLTSN: HRRZ A,(A)
DBLTS3: SOJG C,DBLTS
POPJ P,
DBLTS1: PUSHJ P,DBLTSA
PUSH H,ARRPOS
JRST DBLTS2
DBLTSA: CAIE G,(D)
PUSHJ P,PCOMPS
XCT @(P)
MOVE T,(B)
PUSH H,T
DPB T,[271000,,DPYTAB(G)]
JRST POPJ1
DBLTA: LDB T,[271000,,DPYTAB(G)]
CAIN T,@(B)
AOJA G,DBLTA2
PUSHJ P,DBLTSA
PUSH H,-3(P)
PUSH H,[ASCID /
/]
AOS D,G
DBLTA2: HLLZS DPYTAB(G)
SOJG C,DBLTA
POPJ P,
;TDISP, TDISP1, TDISP2, TDSP2A, TDISPX
TDISP: PUSHJ P,TDISP0
TRZ F,DSPSCR!DSPALL
JRST POPBAJ
TDISP0: SETZM TYOPNT
PUSHJ P,GPAGL
HLRZ TT,T
ANDI T,-1
CAMN T,LSTPAG
JRST TDISP5
MOVEM T,LSTPAG
OUTSTR [ASCIZ /PAGE /]
TYPDEC LSTPAG
OUTSTR [ASCIZ /
/]
TDISP1: MOVEM TT,LSTARR
MOVE A,ARRLIN
SKIPL T,1(A)
CAIN A,BOTSTR
JRST TDISP4
TYPDEC LSTARR
TYPCHR 11
TRNN T,777
TLOA A,350700
HRLI A,440700
ADDI A,LLDESC
TDISP2: ILDB T,A
CAIGE T,40
JRST TDSP2A
TYPCHR (T)
JRST TDISP2
TDSP2A: CAIL T,11
CAILE T,15
JRST TDISPC
TYPCHR (T)
CAIN T,11
JRST TDISP3
CAIE T,12
JRST TDISP2
POPJ P,
;TDISPC, TDISP3, TDISP4, TDISP5, TYPE, TYPEL
TDISPC: TYPCHR "↑"
TYPCHR 100(T)
JRST TDISP2
TDISP3: ILDB T,A
CAIE T,11
JRST TDISP3
JRST TDISP2
TDISP4: JUMPL T,.+2
SKIPA T,[[ASCIZ /END OF PAGE)
/]]
MOVEI T,[ASCIZ /PAGE MARK)
/]
TYPCHR "("
TYPDEC LSTARR
TYPCHR 11
OUTSTR (T)
POPJ P,
TDISP5: CAMN TT,LSTARR
TRNE F,DSPSCR!DSPALL
JRST TDISP1
POPJ P,
TYPE: TRNN F,ARG
IMULI A,=10
PUSHJ P,ARGCHK
SKIPG D,A
POPJ P,
TYPEL: PUSHJ P,TDISP0
MOVEI A,1
PUSHJ P,MOVARR
SOJG D,TYPEL
POPJ P,
;WRPAGE, WRPAG1, WRPAG2, WRBOOK
WRPAGE: TRNE F,WRITE
TRNE F,EDDIR
JRST CLRWRT
TRNE F,REDNLY
JRST WRRDO
WRPAG1: TRNE F,UPDTXT
PUSHJ P,INSDIR
TRNE F,UPDIR
PUSHJ P,DIRUP
SKIPE B,XPLST
PUSHJ P,DIRSET
MOVE A,CHARS
ADDI A,200*5-1
IDIVI A,200*5
MOVEM A,NEWSIZ#
HRRZ C,@DIRPT
MOVE B,1(C)
HRRZ T,DIRP1
SUB B,1(T)
MOVEM B,OLDSIZ#
SUBI A,(B)
SKIPN DIRPAG
JRST WRPAG2
HRRZ TT,@DIR
MOVE TT,1(TT)
SOJ TT,
IMULI TT,200*5
CAMGE TT,DIRSIZ
JRST WRPX0 ;DIRECTORY GREW
WRPAG2: JUMPLE A,WRPOK
MOVE TT,CURPAG
CAMGE TT,PAGES
JRST WRPX
MOVEI TT,(A)
ADDB TT,DIREND+1
SOJ TT,
CAMG TT,FILLEN
SKIPA TT,FILLEN
MOVEM TT,FILLEN
LSH TT,7
MOVEM TT,FILWC
IMULI A,200*5
ADDM A,ROOM
TRO F,UPDIR
TRZ F,XPAGE
PUSHJ P,WRTIT ;NO SHUFFLE IF LAST PAGE
MTAPE DSKO,['GODMOD'↔17]
POPJ P,
IFN BOOKMD, {
WRBOOK: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR [ASCIZ \CANNOT ALTER FILE WHEN IN /B MODE. \]
POPJ P,
};END BOOKMD
;WRPX0, WRPX, WRPX1, WRPX1A, WRPX1B, WRPX2
WRPX0: TRO F,XPAGE
WRPX: TRNN F,XPAGE
JRST 4,.
OUTSTR [ASCIZ /BUBBLING
/]
IMULI A,200*5
ADDM A,ROOM
MOVEI I,1
SKIPN A,DIRPAG
JRST WRPX1A
MOVE A,DIRSIZ
ADDI A,200*5-1+200*5
IDIVI A,200*5
HRRZ B,@DIR
MOVE I,1(B)
SUBI A,(I)
MOVN C,DIRPAG
TRNN F,WRITE
JRST WRPX1B ;FROM OUTDIR
ADD C,CURPAG
JUMPLE C,WRPX1A
WRPX1: ADDM A,1(B)
HRRZ B,(B)
SOJG C,WRPX1
WRPX1A: ADD A,NEWSIZ
SUB A,OLDSIZ
HRRZ B,@DIRPT
HRL I,1(B)
MOVN C,CURPAG
WRPX1B: ADD C,PAGES
WRPX2: ADDM A,1(B)
HRRZ B,(B)
SOJGE C,WRPX2
;WRPX3, WRPX4
WRPX3: PUSHJ P,COPCOR
MOVEI D,EDFIL
PUSHJ P,OPENI
PUSHJ P,OPNLUZ
PUSH P,NEWSIZ
PUSHJ P,OUTDIR
TRZ F,UPDIR+UPDTXT
POP P,NEWSIZ
MOVEI A,(I)
PUSHJ P,SETI
HRRZ B,@DIR
MOVE A,1(B)
TRNN F,WRITE
JRST WRPX4 ;FROM OUTDIR
HRRZ B,DIRP1
SUB A,1(B)
ASH A,7
PUSHJ P,COPDAT
HRRZ T,DIRP1
PUSHJ P,WRTIT
HLRZ A,I
PUSHJ P,SETI
HRRZ B,@DIRPT
MOVE A,1(B)
WRPX4: SUB A,DIREND+1
ASH A,7
PUSHJ P,COPDO
MOVEI D,EDFIL
PUSHJ P,OPNOI
JRST 4,.
TLZ F,ENTRD
MOVEI E,EDFIL
PUSHJ P,OPENW ;MAKE SURE RENAME HAPPENS
POPJ P,
;WRPOK, WRTIT, WRT0
WRPOK: TRNE F,XPAGE
JRST WRPX ;WANT TO BUBBLE ANYWAY
WRTIT: PUSH P,T
MOVEI E,EDFIL
PUSHJ P,OPENW
SKIPN DIRPAG
TRZ F,UPDIR
TRNE F,UPDIR
TRNE F,XPAGE
JRST WRT0
MOVE D,ODSIZ
CAIL D,200*5+3 ; ;-CR-LF
SKIPA D,[170700,,DRIV2+3]
MOVE D,[170700,,DRIV1+3]
MOVEM D,INPNT
MOVE C,PAGES
PUSHJ P,NUM5
MOVEI A,1
PUSHJ P,SETO
MOVE C,-3-1(D)
MOVEI D,
OUTPUT DSKO,C
WRT0: HRRZ A,DIRP1
MOVE A,1(A)
PUSH P,A
PUSHJ P,SETO
MOVEI A,PAGE
MOVEI DSP,WRDSP
MOVSI E,LSPC+NSPEC
MOVE G,OPNT
MOVN B,OCNT
MOVSI B,(B)
MOVE T,FIRPAG
SOJE T,WRLINE
;WRP1, WRLINE, WRLUP, WRLP2, WRRDO, WRRDO2, WRRDO3
WRP1: MOVEI C,14
IDPB C,G
AOBJN B,WRLINE
PUSHJ P,WRBUF
MOVE G,OPNT
MOVN B,OCNT
MOVSI B,(B)
WRLINE: HRRZ A,(A)
CAIN A,BOTSTR
JRST WRDONE
SKIPGE T,1(A)
JRST WRPM
MOVEI D,LLDESC(A)
TRNN T,777
TLOA D,350700
HRLI D,440700
HRRI B,
WRLUP: ILDB C,D
TDNE E,CTAB(C)
XCT @CTAB(C)
IDPB C,G
WRLP2: AOBJN B,WRLUP
PUSHJ P,WRBUF
MOVE G,OPNT
MOVN T,OCNT
HRLI B,(T)
JRST WRLUP
WRRDO:
IFN BOOKMD, {
SKIPE BOOKSW
JRST WRBOOK ;DONT EVER WRITE A BOOK
};END BOOKMD
SORRY PAGE HAS BEEN ALTERED -- PLEASE REAFFIRM MODE.
WRRDO2: MOVE E,[-NMCMDS,,MCMDS]
PUSHJ P,EXTEN1
JRST WRRDO3
PUSHJ P,(D)
TRNE F,REDNLY
JRST CLRWRT
JRST WRPAG1
WRRDO3: OUTSTR [ASCIZ /READONLY OR READWRITE.
/]
JRST WRRDO2
;WRDSP, WRTAB, WRCHK, WRDONE, WRDON2
WRDSP: JRST WRLINE
JRST 4,.
JFCL
MOVEI D, ;KILL NEXT ILDB
JRST WRTAB
JRST 4,.
JRST 4,.
WRTAB: IDPB C,G
HRROI C,-10
IORI C,(B)
SUB B,C
ADD D,BTAB2+10(C)
JUMPGE D,.+2
ADD D,[XOR 1]
SOJA B,WRLP2
WRCHK: LDB E,[370300,,G] ;SEE HOW MANY CHARS WE WROTE (FROM BLK -C(T))
ADD T,OBLK
LSH T,7
ADDI T,-OBUF+1(G)
IMULI T,5
SUB T,BTAB(E)
POPJ P,
WRDONE: POP P,T
SUB P,[1,,1]
MOVNI T,(T)
PUSHJ P,WRCHK
CAME T,CHARS
FATAL BUG IN WRITE CODE
MOVEM G,OPNT
PUSHJ P,CLOSO
MOVN T,NEWSIZ
TRNN F,XPAGE ;BEWARE OF SHRINKING BUBBLE
ADD T,OLDSIZ
JUMPLE T,WRDON2
MOVE A,[OBUF-1,,OBUF]
BLT A,OBUF+177
PUSHJ P,WRBUF
SOJG T,.-1
WRDON2: HRRZ T,@DIRPT
HRRZ T,1(T)
CAME T,OBLK
FATAL BUG IN WRITE CODE
TRNE F,UPDIR+UPDTXT
PUSHJ P,OUTDIR
JRST CLRWRT
;WRPM, BTAB2
WRPM: HRRZ B,-1(P)
MOVN T,1(B)
PUSHJ P,WRCHK
LDB C,[341000,,LLDESC+LPMTXT+1(A)]
IMULI C,200*5
LDB E,[221200,,LLDESC+LPMTXT+1(A)]
ADDI C,(E)
CAIE T,(C)
JRST 4,.
MOVEM G,OPNT
PUSHJ P,CLOSO
MOVE T,-1(P)
HRRZ T,(T)
MOVE C,OBLK
CAME C,1(T)
JRST 4,.
MOVEM T,-1(P)
MOVE G,OPNT
MOVN B,OCNT
MOVSI B,(B)
MOVSI E,LSPC+NSPEC
JRST WRP1
BTAB2: -340000,,1
-250000,,1
-160000,,1
-70000,,1
1
-340000,,
-250000,,
-160000,,
IMPURE
DEFINE INV!(X,Y){-L!X,,.
X: ASCII /COMMENT ⊗ INVALID XXXXX PAGES
Y
/
IFN <.-X>&1,<0> ;SUPER-WINNING CHANNEL
L!X←←.-X}
INV DRIV1,<⊗;>
INV DRIV2,THE REST OF THIS PAGE IS GARBAGE
PURE
;FLSPAG, FLSPGL, FLSPG2, CLRWRT, CLRWR2
FLSPAG: TRNE F,UPDIR
PUSHJ P,DIRFIX
TRNE F,REDNLY!EDDIR
SETZM ATTLOC
SKIPN C,LINES
JRST FLSPG2
HRRZ B,PAGE
TLO F,NOCHK
FLSPGL: MOVEI A,(B)
HRRZ B,(B)
PUSHJ P,FSGIVE
SOJG C,FLSPGL
FLSPG2: TLZ F,NOCHK
SETZM ARRLIN
SETZM WINLIN
SETZM XPAGES
SETZM XPLST
SETZM XCHRS
SETZM BOTSTR+1
CLRWRT: TRZN F,WRITE+UPDIR+UPDTXT+XPAGE
POPJ P,
CLRWR2: MOVEI T,1
MOVEM T,WFLAG
MOVEM T,WFLAG2
MOVE T,SCRTOP
HLLZS DPYTAB(T)
TRO F,DSPSCR
POPJ P,
;TV, RSYS, RUN, RUN1
FILWRD←←0 ;FOR PASSING RETURN FILNAM, ETC.
DEVWRD←←6 ;" (NOTE THIS STUFF IS SAME PLACE AS SYS PUTS IT)
TV: MOVE T,[440700,,[ASCIZ /TV/]]
MOVEM T,EXTPNT
RSYS: SKIPA T,['SYS ']
RUN: MOVSI T,'DSK'
MOVEM T,RUNFIL-1
MOVE T,EXTPNT
MOVEM T,TYIPNT
MOVE T,[MOVEI C,15]
MOVEM T,TYIINS
SETZM RUNFIL
MOVSI T,'DMP'
MOVEM T,RUNFIL+1
MOVE T,PPN
MOVEM T,RUNFIL+3
MOVE D,[SETZ RUNFIL]
PUSHJ P,FRD0
JRST RUNILL
TLNE D,40
JRST RUN1
SKIPN RPGACS+FILWRD
JRST RUNNON
SKIPE T,RPGACS+DEVWRD
MOVEM T,RUNFIL-1
MOVE T,[RPGACS+FILWRD,,RUNFIL]
BLT T,RUNFIL+1
MOVE T,RPGACS+FILWRD+3
TLNN T,77
JRST RUN1
TRNE T,77
MOVEM T,RUNFIL+3
RUN1: MOVE T,[RUNFIL-1,,LKUP-1]
MOVEI C,SWP
PUSHJ P,OPNDEV
LOOKUP SWP,LKUP
JRST RUNFNF
MOVE T,EDFIL
MOVEM T,RPGFIL
HLLZ T,EDFIL+1
TRNE F,REDNLY
TRO T,200000
SKIPN DIRPAG
TRO T,100000
MOVEM T,RPGEXT
MOVE T,EDFIL+3
CAMN T,PPN
MOVEI T,
MOVEM T,RPGPPN
PUSHJ P,GPAGL
HRRZM T,RPGPAG
HRR T,ATTNUM
IORI T,400000
TRNN F,ATTMOD
HRR T,EDCNM
MOVSM T,RPGLIN
TRZE F,ATTMOD
PUSHJ P,ATTEX
PUSHJ P,FINISH
MOVE T,[RUNFIL,,RPGACS+FILWRD]
BLT T,RPGACS+FILWRD+3
MOVE T,RUNFIL-1
MOVEM T,RPGACS+DEVWRD
MOVSI 17,RPGACS
BLT 17,17
MOVEI A,RUNDEV
SWAP A,
JRST 4,.
;RUNILL, RUNNON, RUNFNF, RUNDEV, RUNFIL
RUNILL: SORRY ILLEGAL FILE SPECIFICATION.
JRST POPJ1
RUNNON: SORRY I HAVEN'T ANYPLACE TO RETURN TO.
JRST POPJ1
RUNFNF: TLNN D,40
JRST RUNNON
PUSHJ P,FILERR
RELEAS SWP,
OUTSTR [ASCIZ /
/]
JRST POPJ1
IMPURE
RUNDEV: 0
RUNFIL: BLOCK 2
1
0
PURE
;SEARCH ROUTINES
;FLAGS
SDELIM←←1
SBKWDS←←2
SEXACT←←4
OFFPAG←←10
;DATA BLOCKS
SRCFLG←←0
SRCSIZ←←1
SRCBUF←←2
;FREE STORAGE MACROS
DEFINE GETFS(X)
{ SKIPN X,@SFSPNT
PUSHJ P,SFSGT
EXCH X,SFSPNT}
DEFINE RETFS(X)
{ EXCH X,SFSPNT
HRRZM X,@SFSPNT}
SFSNUM←←8
;OPERATOR CODES
NOTOP←←2
INFOP←←3
OROP←←5
ANDOP←←6
BINOP←←7
ENDOP←←7
CROP←←10
CLOSOP←←11
ORCHR←←12
ANDCHR←←13
SGBBIT←←400000
SGEBIT←←200000
NLDBIT←←100000
NOTBT←←2000
XFRSAV←←4
INDTST←←5
REMTST←←10
LSBLK←←5
;SREAD, SREAD1, SREAD2, SREAD3, SREAD4, SRSTOR, SRSTR2
SREAD: MOVEI T,
CAIN B,3
TRO T,SDELIM
JUMPGE A,.+2
TRO T,SBKWDS
TRZE F,EDITM
TRO T,EDITM
MOVEM T,SRFLG#
MOVMM A,SRCNT#
MOVE D,[440700,,BUF]
MOVNI B,SRSIZ*5-1
TLZ F,TF1
PUSHJ P,TYI
JRST SREAD4
SREAD1: IDPB C,D
SREAD2: PUSHJ P,TYI
JRST SRACT
SREAD3: AOJN B,SREAD1
SORRY SEARCH STRING TOO LONG.
SETZB D,SRCNT
AOS -1(P)
JRST SREAD2
SREAD4: CAIN C,175
JRST POPTJ
CAIE C,12
JRST SREAD5
TLO F,TF1
SOJA B,SREAD2
SRSTOR: JUMPLE D,SRSTR2
MOVEI TT,
IDPB TT,D
TLNE D,760000
JRST .-2
MOVSI TT,BUF
HRRI TT,SRCBUF(E)
SUBI D,BUF
ADDI D,(TT)
BLT TT,(D)
ADDI B,SRSIZ*5-1+1
MOVEM B,SRCSIZ(E)
SRSTR2: JUMPN D,.+2
MOVEI E,SRDUMY
SETZM SRCFLG(E)
JRST (Q)
;SRACT, SREAD5, SRALT, SRALT2, SRALUZ, SREDT
SRACT: TLNE F,TF1
JRST SRALT
JSP Q,SRSTOR
SREAD5: TRZ F,ARG!REL!NEG
MOVEI DSP,CMDSP
MOVEI A,
PUSH P,E
PUSHJ P,CMDEX
JRST [SUB P,[2,,2]↔JRST POPJ2]
POP P,E
MOVE T,SRFLG
HRLI C,(B)
MOVEM C,SCHR#
MOVEM D,SDSP#
MOVEM A,SARG#
TLNE D,SACMD
JRST .+3
TLNE D,SSCMD
XCT -1(D)
MOVEM T,SRFLG
TRNN T,EDITM
POPJ P,
MOVE A,ARRLIN
HRRZ T,2(A)
MOVEM T,SRCNUM
MOVE T,EDCNM
MOVEM T,SRCOFF
POPJ P,
SRALT: CAIN C,15
JRST SREAD3
CAIN C,175
JRST POPTJ
CAIE C,12
JRST SRALUZ
JSP Q,SRSTOR
SRALT2: PUSHJ P,TYI
JRST SREAD5
JRST SRALT2
SRALUZ: MOVEM C,COMCHR
JRST POPTJ
;FINDIT, FOUND, FNDMOV, FNDERR
FINDIT: SETZM TYIPNT
MOVEI E,FNDTBF
PUSHJ P,SREAD
PUSHJ P,SCOMP
PUSHJ P,SRCPAG
JRST FNDERR
FOUND: PUSHJ P,SPFIN
PUSHJ P,SFLUSH
FND2: MOVE A,SARG
HLRZ B,SCHR
HRRZ C,SCHR
MOVE D,SDSP
TRNE F,ARG
TRNE F,REL
TLNN D,SACMD
JRST FNDMOV
TRON F,ARG!REL
MOVEI A,
TLNE D,SSCMD
XCT -1(D)
SUB A,ARRL
ADD A,SRCL
JRST POPJ2
FNDMOV: JUMPGE D,.+2
TRNN F,REL
SKIPA A,SRCL
ADD A,SRCL
PUSHJ P,SETARR
MOVE A,SARG
; TLNE D,SSCMD
; XCT -1(D)
MOVE T,SRCOFF
TLNE D,EDOK*10
MOVEM T,EDMOV
JRST POPJ2
FNDERR: MOVE T,SRCN1
CAME T,SRCNT
SKIPA T,[[ASCIZ /NOT FOUND ENOUGH -- /]]
MOVEI T,[ASCIZ /NOT FOUND -- /]
FNDER2: OUTSTR [ASCIZ /
SORRY -- /]
OUTSTR (T)
MOVE B,SDATA
ADDI B,SRCBUF
PUSHJ P,SFLUSH
SETZM COMCHR
JRST CMDER2
;FIND
FIND: MOVE T,EXTPNT
MOVEM T,TYIPNT
HRLI C,(<MOVEI C,>)
MOVEM C,TYIINS
MOVEI E,FNDBUF
PUSHJ P,SREAD
SETZM TYIPNT
PUSHJ P,SCOMP
TRNE F,SBKWDS
SKIPA T,[SCONTB]
MOVEI T,SCONTF
PUSHJ P,SRCPG1
JRST FNDERR
TRZN G,OFFPAG
JRST FOUND
EXCH G
MOVEI D,-SBKDSP(G)
IDIVI D,3
HLLZ D,BTAB3(D)
HRRI D,@SBKNWA
MOVEM D,SCLOB#
MOVE D,IBLK
MOVE T,SDIRPT
SUBI D,@1(T)
MOVEM D,TSTBLK
PUSHJ P,SFLUSH
PUSHJ P,WRPAGE
PUSHJ P,FLSPAG
MOVE A,SRCPG
PUSHJ P,FNDPAG
HRRZ T,1(T)
ADDM T,TSTBLK
MOVEI T,SSET
MOVEM T,TSTSET
PUSHJ P,NEWPG1
SKIPA B,[400]
JSP SARRGH
PUSHJ P,FSGET
HRRM A,SCXCT
MOVEI T,-1(T)
MOVEM T,SFSLST
MOVEM F,SSAVF
EXCH F,SRFLG
MOVE D,[SRCPGB,,SRCPGF]
MOVEM D,SRCTYP
MOVEI T,SBKNL
HRRM T,SBKNW
MOVE A,SRCL
PUSHJ P,FNDLIN
MOVE A,SRCLIN
MOVEM T,SRCLIN
ADDI A,(T)
MOVEI E,
PUSHJ P,SCNBAK
PUSHJ P,SPFIN
EXCH F,SRFLG
HRRZ A,SCXCT
PUSHJ P,FSGIVE
MOVN A,GTDEL
ASH A,-1
ADD A,SRCL
PUSHJ P,SETWIN
JRST FND2
;DIRSRC, DFERR, SRCDF, SDFCR
DIRSRC: SUB P,[1,,1]
SETZM TYIPNT
TRZ T,SBKWDS
MOVEM T,SRFLG
MOVEI D,CPOPJ
MOVEM D,SDSP
PUSHJ P,SCOMP
MOVEI D,SRCDF
PUSHJ P,SRCSET
MOVEI T,1
MOVEM T,SRCPG
HRRZ A,DIR
MOVEM A,SRCLIN
ADD A,[440700,,LPDESC]
ILDB C,A
MOVEI D,3
PUSHJ P,SCALL
JRST DFERR
MOVE A,SRCPG
EXCH F,SRFLG
CAMN A,FIRPAG
JRST [MOVEI A,1↔PUSHJ P,SETARR↔JRST .+2]
PUSHJ P,NEWPG0
SKIPA B,SCHR
JSP SARRGH
TLNN B,2
JRST SFLSH1
EXCH F,SRFLG
MOVEI T,2
MOVEM T,SRCN1
SETZM SRCOFF
PUSHJ P,SRCPAG
SOSG SRCN1
JRST FOUND
SKIPA T,[[ASCIZ /FOUND IN DIRECTORY ONLY (HUH?) -- /]]
DFERR: MOVEI T,[ASCIZ /NOT IN DIRECTORY -- /]
JRST FNDER2
SRCDF: 15↔JSP SDFCR
0↔JSP SARRGH
177↔JSP SARRGH
SDFCR: HRRZ A,@SRCLIN
CAIN A,DIREND
JRST SRCHLX
MOVEM A,SRCLIN
AOS SRCPG
ADD A,[350700,,LPDESC]
LDB C,A
JRST @
;SSET, SSET2
SSET: SETZM TSTBLK
LDB C,SCLOB
MOVEM C,SRCOFF
MOVEI C,177
DPB C,SCLOB
MOVEI C,SSET2
MOVEM C,RLDA
POPJ P,
SSET2: MOVE C,LINES
ADDI C,1
MOVEM C,SRCL
MOVE C,E
IBP C
SUBI C,(A)
MOVEM C,SRCLIN
MOVEI C,RLD
MOVEM C,RLDA
POP P,C
HRLI C,SRCOFF
JRA C,-2(C)
SCONTB: JSP SBARF
;SCOMP, SCOMPX, SCOMPR
SCOMP: MOVEM P,SSAVP#
MOVEM F,SSAVF#
MOVEM E,SDATA#
MOVEI T,[0]
MOVEM T,SFSPNT#
SETZM SFSLST#
HLLZS VBBITS
MOVE B,SRCSIZ(E)
ADDI B,1
MOVE T,SRFLG
TRNE T,SDELIM
ADDI B,2
LSH B,1
EXCH F,SRFLG
IOR F,SRCFLG(E)
PUSHJ P,SFSGET
JSP TT,SFSPUT
TRNE F,SEXACT
TDZA TT,TT
SKIPA TT,[377777777000]
TDZA T,T
MOVSI T,LETF
MOVEM T,SLMODE#
MOVEM TT,SLMOD2#
SKIPE A,SRCNT
PUSHJ P,SPARSE
JUMPE A,NOSRCH
PUSHJ P,SGRAPH
PUSHJ P,SBACK
JRST SCGEN
SFLUSH: EXCH F,SRFLG
SFLSH1: SETZM SFSPNT
TLO F,NOCHK
SKIPA A,SFSLST
SFLSL: MOVEI A,(C)
HLRZ C,(A)
HRRZ T,(A)
SUBI A,-2(T)
PUSHJ P,FSGIVE
JUMPN C,SFLSL
TLZ F,NOCHK
MOVE T,[PUSHJ P,UUOH]
MOVEM T,41
POPJ P,
NOSRCH: OUTSTR [ASCIZ /NULL SEARCH NOT EXECUTED
/]
JRST SBARF2
;SBARF, SBARF1, SARRGH, SFSGT, SFSGET, SFSPUT, SFSPTL
SBARF: OUTSTR [ASCIZ /SEARCH STRING TOO COMPLEX.
/]
SUBI 1
SBARF1: MOVEM SBADR#
SBARF2: MOVE F,SSAVF
MOVE P,SSAVP
SUB P,[1,,1]
SKIPN T,FSEND1
JRST .+3
MOVEM T,FSEND
PUSHJ P,ENDFIX
PUSHJ P,SFLSH1
JRST POPJ1
SARRGH: OUTSTR [ASCIZ /INTERNAL SEARCH LOSSAGE.
/]
SOJA SBARF1
SFSGT: FOR X IN(A,B,T,TT){PUSH P,X↔}
MOVNI T,2
ADDM T,-4(P)
CAML P,[-10,,PDL-1+LPDL-10]
JSP SBARF
MOVEI B,SFSNUM*2
PUSHJ P,SFSGET
JSP TT,SFSPUT
FOR X IN(TT,T,B,A){POP P,X↔}
POPJ P,
SFSGET: EXCH F,SRFLG
PUSHJ P,FSGET
EXCH F,SRFLG
HRLI T,LOKBIT
HLLM T,-1(A)
MOVEI T,-1(T)
EXCH T,SFSLST
HRLM T,@SFSLST
POPJ P,
SFSPUT: LSH B,-1
SKIPA T,A
SFSPTL: HRRZM T,-2(T)
ADDI T,2
SOJG B,SFSPTL
EXCH A,SFSPNT
HRRZM A,-2(T)
JRST (TT)
;SPARSE
SPARSE: MOVSI A,440700
HRRI A,SRCBUF(E)
MOVSI H,NSPEC!SSP1
SETZM SLEV#
TRNE F,SBKWDS
SKIPA T,[HRRM B,(G)]
SKIPA T,[HLRM G,(B)]
SKIPA TT,[MOVS G,G]
MOVSI TT,(<JFCL>)
MOVEM T,SSLINK#
MOVEM TT,SSSWAP#
MOVEI DSP,SSCDSP
MOVEI Q,ENDOP
PUSHJ P,SPARS1
CAIN Q,ENDOP
SKIPE SLEV
JRST 4,.
MOVEI A,(G)
TRNN F,SDELIM
POPJ P,
JUMPE A,CPOPJ
GETFS T
MOVE A,[1,,VBBITS]
HLLZM A,(T)
HRRZM A,1(T)
HLRZ TT,G
HRRM T,(TT)
GETFS T
HRRZM A,1(T)
HLRE TT,(G)
JUMPL TT,.+2
ADDI TT,200
ANDI TT,¬77
HRLI G,1(TT)
MOVEM G,(T)
MOVEI A,(T)
POPJ P,
;SPARS1, SPARS2, SPDSP, SSCAN, SSCANA, SSCANX
SPARS1: HRLM Q,(P)
PUSHJ P,SSCAN
SPARS2: HLRZ D,(P)
CAIG Q,(D)
POPJ P,
PUSH P,G
PUSHJ P,SPARS1
POP P,T
HRLI T,(G)
GETFS G
HRLI G,(G)
MOVSM T,1(G)
HLRZ T,(T)
LSH T,-6
CAIE T,(E)
SETOB T,E
LSH T,6
XCT SPDSP-BINOP(D)
HRLZM T,(G)
JRST SPARS2
SPDSP: JRST 4,.
IORI T,OROP
JRST 4,.
IORI T,OROP
IORI T,ANDOP
SSCAN: SETZB E,G
PUSHJ P,SSCAN1
CAIL Q,BINOP
POPJ P,
JUMPE G,.-3
MOVS B,G
SSCANA: ANDI T,¬77
ADDI E,(T)
PUSHJ P,SSCAN1
CAIL Q,BINOP
JRST SSCANX
JUMPE G,.-3
XCT SSLINK
HRRI B,(G)
JRST SSCANA
SSCANX: HLR G,B
XCT SSSWAP
LSH E,-6
DPB E,[301400,,(G)]
JUMPGE T,CPOPJ
IORM T,(G)
POPJ P,
;SSCAN1, SSCN1A, SSCN1B, SSCQT, SSCBIN, SSCINF, SSCNOT, SSCUOP, SSCVB
SSCAN1: ILDB C,A
TDNE H,CTAB(C)
XCT @CTAB(C)
SSCN1A: MOVEI Q,
SSCN1B: MOVEI T,100
GETFS G
HRLI G,(G)
HRLZM Q,(G)
MOVEM C,1(G)
POPJ P,
SSCQT: ILDB C,A
JUMPN C,SSCN1A
SSCBIN: LDB Q,[270400,,@CTAB(C)]
POPJ P,
SSCINF: MOVEI Q,INFOP+400000
MOVSI T,-100
ILDB C,A
CAIN C,"∞"
AOJA Q,SSCUOP
JRST 2,@[20000,,SSCUOP]
SSCNOT: MOVEI Q,NOTOP
SSCUOP: HRLM Q,(P)
PUSHJ P,SSCAN1
CAIL Q,BINOP
POPJ P,
ANDI T,¬77
TSO T,(G)
HRLM T,(G)
HLRE Q,(P)
JUMPGE Q,.+4
ANDI Q,77
JUMPE G,.+2
MOVEI T,-100
MOVEI TT,(G)
GETFS G
HRLI G,(G)
MOVEM TT,1(G)
ANDI T,¬77
IORI T,(Q)
HRLZM T,(G)
POPJ P,
SSCVB: MOVEI C,VBBITS
MOVEI Q,1
JRST SSCN1B
;SSCLP, SSCDSP
SSCLP: AOS SLEV
MOVSI H,NSPEC!SSP1!SSP2
MOVEI Q,CLOSOP
HRLM E,(P)
PUSH P,B
PUSHJ P,SPARS1
POP P,B
HLRE E,(P)
SOSG SLEV
MOVSI H,NSPEC!SSP1
CAIE Q,CLOSOP
ADD A,[70000,,]
SKIPN Q,G
TDZA T,T
LDB Q,[220600,,(G)]
XCT SSSWAP
POPJ P,
SSCDSP: JUMPA ENDOP,SSCBIN
JRST 4,.
JUMPA CROP,SSCBIN
JRST 4,.
JRST 4,.
JRST SSCAN1
REPEAT 12-6,{JRST 4,.}
JUMPA ANDCHR,SSCBIN
JRST SSCNOT
JRST SSCLP
JUMPA CLOSOP,SSCBIN
MOVSI C,NOTBT
JRST SSCQT
JUMPA ORCHR,SSCBIN
JRST SSCINF
JRST SSCVB
FACNT←←174
FABITS: FACNT,,
377537,,-20
-20
-20
-40
;SGRAPH, SGRPH1, SGRPH2, SGRPHX, SGDO1, SGDO1X, SGDOX2, SGDSP, SGDO1B
SGRAPH: SETZM SSVNUM#
SETZM SSVMAX#
PUSHJ P,SGDO1
JUMPE B,CPOPJ
HRLM B,(P)
SGRPH1: HLRZ C,B
PUSHJ P,SGDO1
JUMPE B,SGRPHX
SGRPH2: MOVSI T,SGEBIT
ANDCAM T,1(C)
HRRZ TT,(C)
HRRM B,(C)
HRLM C,(B)
JUMPE TT,SGRPH1
MOVEI C,(TT)
; PUSHJ P,SGDUP
JRST SGRPH2
SGRPHX: MOVSI B,(C)
HLR B,(P)
POPJ P,
SGDO1: SKIPN B,A
POPJ P,
HRRZ A,(A)
LDB T,[220600,,(B)]
XCT SGDSP(T)
SGDO1X: IORB T,1(B)
SGDOX2: LDB TT,[301400,,(B)]
SETZM (B)
HRLI B,(B)
TLNN T,NOTBT
POPJ P,
AOS T,SSVNUM
CAMLE T,SSVMAX
MOVEM T,SSVMAX
DPB T,[221100,,1(B)]
POPJ P,
SGDSP: MOVSI T,SGEBIT
JRST SGDO1B
JRST SGNOT
REPEAT 4,{JSP SBARF}
SGDO1B: AOS T,SSVNUM
CAMLE T,SSVMAX
MOVEM T,SSVMAX
MOVSI T,SGEBIT!1000(T)
JRST SGDO1X
;SGNOT
SGNOT: HRLM A,(P)
HRRZ A,1(B)
RETFS B
PUSHJ P,SGDO1
HLRZ A,(P)
JUMPE B,CPOPJ
CAIE TT,1
JSP SBARF
MOVSI T,NOTBT
XORB T,1(B)
TLNE T,NOTBT
JRST SGDOX2
HLRZ T,T
ANDI T,777
CAMN T,SSVMAX
SOS SSVMAX
SOS SSVNUM
MOVSI T,777
ANDCAM T,1(B)
JRST SGDOX2
;SBACK, SBACK1, SBACK2, SBACK3, SBACK4
SBACK: HRRZM B,SGPNT#
HLRZ A,B
MOVEI C,SGEND#
MOVSI T,INDTST⊗9
HLLOM T,SBLST+1
SETZM SGECNT#
SBACK1: GETFS T
HRRZM T,(C)
AOS SGECNT
MOVEI C,(T)
MOVEI B,(A)
SKIPL 1(B)
JRST .+4
HLRZ B,(B)
HRRZ T,1(B)
JUMPN T,.-2
HRLI A,(B)
MOVEM A,(C)
SETZM 1(C)
HRL C,(A)
PUSH P,C
PUSHJ P,SBCALC
PUSHJ P,[TLZN B,NLDBIT↔HLRZ B,(B)↔HLRZ G,(C)↔POPJ P,]
JRST 4,.
SKIPGE 1(B)
HRRZ B,(B)
HLRZ A,(C)
HRRZM A,1(C)
HRRM B,(A)
IORM B,(A)
HRRZ C,(C)
SBACK2: PUSHJ P,SBCALC
MOVEI G,(C)
JRST SBACK4
HLRZ T,(C)
SKIPGE 1(C)
JRST SBBRCH
SBACK3: SKIPGE 1(B)
HRR B,(B)
HRLM B,(C)
ANDCMI B,-1
IORM B,1(C)
SKIPE C,T
JRST SBACK2
SBACK4: POP P,C
HLRZ A,C
JUMPN A,SBACK1
SETZM (C)
POPJ P,
;SBBRCH, SBBR2
SBBRCH: SKIPN A,T
TROA A,SGPNT
SKIPL 1(A)
JRST SBBR2
SKIPA A,(A)
HLRZ A,(A)
HRRZ TT,(A)
CAIE TT,(C)
JRST .-3
SBBR2: HRRZ TT,(C)
HRRM TT,(A)
MOVEI A,(C)
HRRZ C,1(C)
RETFS A
JRST SBACK3
;SBCALC, SBCAL0, SBCAL1, SBCAL2, SBCAL3
SBCALC: SETZM SBLST
SKIPGE T,1(C)
JRST SBCBP
TLC T,NOTBT
SBCAL0: MOVEM T,SBTST#
HLRZ B,(C)
MOVSI D,(C)
HRRI D,SBLST1
SETZM SBLST1#
JUMPE B,SBCNON
HLRZ A,(B)
MOVEI B,(C)
TLZ F,TF1
SBCAL1: JUMPE A,SBCAL3
HLRZ G,(C)
MOVEI H,(A)
SBCAL2: JSP E,SCCOM
JRST SBCLUZ
JRST SBCCB
JRST SBCCB
SKIPA T,1(H)
SBCL2A: MOVE T,1(H)
TLNE T,777
TLO F,TF1
HLRZ G,(G)
HLRZ H,(H)
JUMPN H,SBCAL2
SBCAL3: MOVEI G,SBTST-1
HLRZ H,(B)
JSP E,SCCOM
JRST SBCLUZ
JRST SBCAL4
JRST SBCAL4
SKIPA T,1(H)
MOVE T,1(H)
TLNN T,777
JRST SBCX
;FALLS THRU TO SBCAL4
;SBCAL4, SBCNON, SBCX, SBCOPL, SBCOP2, SBCEND, SBCEN2, SBCFIX, SBCFXL, SBCFXE, POPJ2
SBCAL4: MOVEI B,(H)
TLOA B,NLDBIT
SBCNON: HRRZ B,SGPNT
SBCX: XCT @(P)
TLZN F,TF1
JRST SBCEND
HLRZ H,(B)
JUMPE H,SBCEND
TLNE B,NLDBIT
HLRZ G,(G)
SBCOPL: MOVE T,1(H)
TLNN T,777
JRST SBCOP2
TLZ T,¬777
TLO T,XFRSAV⊗9
IOR T,B
HRRI T,(G)
GETFS TT
HRRZM B,(TT)
MOVEM T,1(TT)
MOVEI B,(TT)
SBCOP2: HLRZ G,(G)
HLRZ H,(H)
JUMPN H,SBCOPL
SBCEND: SKIPN SBLST1
JRST SBCOK
TLNE B,NLDBIT
JRST SBCEN1
HRRM B,(D)
SBCEN2: MOVE B,SBLST1
SKIPN T,SBLST
MOVEI T,SBLST
SBCFIX: HLLZ TT,B
SBCFXL: LDB G,[3700,,1(T)]
CAML G,[INDTST⊗9,,]
TRNN G,-1
JRST SBCFXE
HRLM B,(T)
IORM TT,1(T)
HRRZ T,(T)
JUMPN T,SBCFXL
SBCFXE: HRRM B,SBLST
HLRZ B,D
SKIPE SBLST1
JRST SBCNXT
HLRZ B,SBLST
POPJ2: POP P,T
JRST 2(T)
;SBCOK, SBCEN1, SBCLUZ, SBCLZ1, SBCNXT, SBCBP, SBCBPL
SBCOK: SKIPN T,SBLST
JRST POPJ2
JRST SBCFIX
SBCEN1: GETFS T
HRLZM B,(T)
MOVSI B,INDTST⊗9!NLDBIT
MOVEM B,1(T)
HRRM T,(D)
JRST SBCEN2
SBCLUZ: SKIPN T,SBLST1
JRST SBCNXT
SBCLZ1: HRRZ TT,(T)
RETFS T
SKIPE T,TT
JRST SBCLZ1
SBCNXT: HLRZ B,(B)
MOVSI D,(B)
HRRI D,SBLST1
SETZM SBLST1
JUMPE B,SBCNON
HLRZ A,(B)
JUMPE A,SBCNON
HLRZ A,(A)
JRST SBCAL1
SBCBP: MOVSI T,-1
ADDB T,1(C)
TLNE T,777
JRST POPJ1
MOVE A,[FABITS+1,,SBBUF]
BLT A,SBBUF+3
SKIPA G,(C)
SBCBPL: MOVEI G,(T)
PUSHJ P,MAKBIT
ANDCAM TT,SBBUF(T)
HLRZ T,(G)
CAIE T,(C)
JRST SBCBPL
HRRM G,1(C)
MOVSI T,SGBBIT
ANDCAM T,1(G)
MOVE T,[1000,,SBBUF-1]
JRST SBCAL0
;SBCCB, SBCCB1, SBCCB2, SBCCB8, SBCCB3, SBCCB4, SBCCB5
SBCCB: EXCH G,H
PUSHJ P,MAKBIT
MOVEM TT,BITBF1(T)
EXCH G,H
PUSHJ P,MAKBIT
ANDM TT,BITBF1(T)
SKIPN T,SBLST
JRST SBCCB3
LDB E,[221100,,1(G)]
JUMPN E,.+2
JSP SARRGH
PUSH P,G
HLRZ T,T
SBCCB1: LDB TT,[330400,,1(T)]
CAIGE TT,INDTST
JRST SBCCB8
MOVEI G,(T)
SBCCB2: LDB T,[221100,,1(G)]
CAIE T,(E)
JRST .+3
PUSHJ P,MAKBIT
ANDCAM TT,BITBF1(T)
HRRZ T,(G)
JUMPN T,SBCCB1
SBCCB8: HLRZ G,(G)
JUMPN G,SBCCB2
POP P,G
SBCCB3: MOVEI E,BITBF1-1
PUSHJ P,BITCNT
JUMPE T,SBCLUZ
CAIN T,1
JRST SBCCB7
CAIN T,2
JRST SBCCB6
SBCCB4: MOVSI E,INDTST⊗9
HRRI E,(H)
SBCCB5: GETFS T
HRRM T,(D)
HRRI D,(T)
SETZM (D)
LDB T,[221100,,1(G)]
TLO E,(T)
MOVEM E,1(D)
JRST SBCL2A
;SBCCB6, SBCCB7, BITCNT, BITCN1
SBCCB6: SKIPE TT,3(E)
CAME TT,4(E)
JRST SBCCB4
TDNN TT,SLMOD2
JRST SBCCB4
SBCCB7: PUSHJ P,NEWBTC
TLO E,REMTST⊗9
JRST SBCCB5
BITCNT: SKIPE T,1(E)
PUSHJ P,BITCN1
PUSH P,T
SKIPE T,2(E)
PUSHJ P,BITCN1
ADD T,(P)
IDIVI T,77
MOVEM TT,(P)
SKIPE T,3(E)
PUSHJ P,BITCN1
PUSH P,T
SKIPE T,4(E)
PUSHJ P,BITCN1
POP P,TT
ADD T,TT
IDIVI T,77
POP P,T
ADD T,TT
POPJ P,
BITCN1: MOVE TT,T
LSH TT,-1
AND TT,[333333333333]
SUB T,TT
LSH TT,-1
AND TT,[333333333333]
SUBB T,TT
LSH TT,-3
ADD T,TT
AND T,[70707070707]
POPJ P,
;NEWBIT, NEWBT0, NEWBT1, NEWBT2, NEWBT3, NEWBT4, NEWBT5
NEWBIT: CAIG T,2
JRST NEWBTC
CAIL T,FACNT-2
JRST NEWBNC
NEWBT0: HRLI E,T
PUSH P,E
PUSH P,T
HRRI E,VBBITS
NEWBT1: HLRZ TT,(E)
CAME TT,(P)
JRST NEWBT2
MOVE T,[-4,,1]
MOVE TT,@E
CAMN TT,@-1(P)
AOBJN T,.-2
JUMPGE T,NEWBT4
HLRZ TT,(E)
NEWBT2: ADD TT,(P)
CAIE TT,FACNT
JRST NEWBT3
MOVE T,[-4,,1]
MOVE TT,FABITS(T)
ANDCM TT,@E
CAMN TT,@-1(P)
AOBJN T,.-3
JUMPGE T,[HRLI E,NOTBT!1000↔JRST NEWBT5]
NEWBT3: HRR E,(E)
TRNE E,-1
JRST NEWBT1
PUSH P,A
PUSH P,B
MOVEI B,6
PUSHJ P,SFSGET
MOVEI E,(A)
HRRZ A,VBBITS
HRRM E,VBBITS
HRRZM A,(E)
POP P,B
POP P,A
MOVE T,(P)
HRLM T,(E)
MOVEI T,1
MOVSI T,@-1(P)
HRRI T,1(E)
BLT T,4(E)
SETZM 5(E)
NEWBT4: HRLI E,1000
NEWBT5: SUB P,[2,,2]
POPJ P,
;NEWBTC, NEWBC1, NEWBC2, NEWBC3, NEWBNC, NEWBN1, NEWBN2, NEWBN3, NEWBCZ, NEWBNZ
NEWBTC: JUMPE T,NEWBCZ
CAIE T,2
JRST NEWBC1
SKIPE TT,3(E)
CAME TT,4(E)
JRST NEWBT0
TDNN TT,SLMOD2
JRST NEWBT0
NEWBC1: HRLI E,-4
SKIPE T,1(E)
JFFO T,NEWBC2
AOBJN E,.-2
JSP SARRGH
NEWBC2: HLRZ E,E
NEWBC3: HRRI E,4(E)
LSH E,5
ADDI E,(TT)
POPJ P,
NEWBNC: CAIL T,FACNT
JRST NEWBNZ
CAIE T,FACNT-2
JRST NEWBN1
MOVE TT,FABITS+3
ANDCM TT,3(E)
JUMPE TT,NEWBT0
TDNN TT,SLMOD2
JRST NEWBT0
XOR TT,4(E)
CAME TT,FABITS+4
JRST NEWBT0
NEWBN1: HRLI E,E
PUSH P,E
MOVE E,[-4,,1]
NEWBN2: MOVE T,FABITS(E)
ANDCM T,@(P)
JFFO T,NEWBN3
AOBJN E,NEWBN2
JSP SARRGH
NEWBN3: SUB P,[1,,1]
HRRI E,NOTBT⊗-5
MOVS E,E
JRST NEWBC3
NEWBCZ: TDZA E,E
NEWBNZ: MOVSI E,NOTBT
POPJ P,
;SCCOM, SCCNOT
SCCOM: HLLZ T,1(G)
HLR T,1(H)
TDNE T,[405000,,405000]
JRST SCCBIT
MOVE T,1(G)
XOR T,1(H)
TDNN T,[NOTBT,,-1]
JRST 4(E)
MOVE TT,1(G)
HLR TT,CTAB(TT)
TLNE T,NOTBT
JRST SCCNOT
TSNN TT,SLMODE
JRST .+3
TRNN T,¬40
JRST 4(E)
TLNN TT,NOTBT
JRST (E)
HRRZ TT,1(G)
JUMPE TT,2(E)
HRRZ TT,1(H)
JUMPE TT,3(E)
JRST 1(E)
SCCNOT: TSNE TT,SLMODE
TRNE T,¬40
TRNN T,-1
JRST (E)
TLNE TT,NOTBT
JRST 2(E)
JRST 3(E)
;SCCBIT
SCCBIT: PUSHJ P,MAKBIT
MOVEM TT,BITBF1(T)
EXCH G,H
PUSHJ P,MAKBIT
MOVEM TT,BITBF2(T)
EXCH G,H
MOVSI T,-4
MOVE TT,BITBF1(T)
TDNN TT,BITBF2(T)
AOBJN T,.-2
JUMPGE T,(E)
MOVSI T,-4
SETCM TT,BITBF1(T)
TDNN TT,BITBF2(T)
AOBJN T,.-2
JUMPL T,.+2
ADDI E,1
MOVSI T,-4
SETCM TT,BITBF2(T)
TDNN TT,BITBF1(T)
AOBJN T,.-2
JUMPGE T,3(E)
JRST 1(E)
;MAKBIT, MAKBT0, MAKBT1, MAKBTN, MAKBN2, MAKBTB, MAKBB3
MAKBIT: SKIPGE 1(G)
JRST MAKBBT
MAKBT0: LDB T,[330300,,1(G)]
XCT MBDSP(T)
SKIPG @(P)
JRST MAKBT1
MOVSI T,-4
XCT @(P)
AOBJN T,.-1
MAKBT1: HRRZ T,1(G)
LDB TT,[360100,,CTAB(T)]
ROTC T,-5
ROT TT,5
MOVE TT,BITTAB(TT)
MAKBTX: TDNN T,SLMODE
POPJ P,
XCT @(P)
XORI T,1
POPJ P,
MAKBTN: SKIPG @(P)
JRST MAKBN2
MOVSI T,-4
MOVE TT,FABITS+1(T)
XCT @(P)
AOBJN T,.-2
MAKBN2: HRRZ T,1(G)
MOVEI TT,
ROTC T,-5
ROT TT,5
SETCM TT,BITTAB(TT)
AND TT,FABITS+1(T)
JRST MAKBTX
MAKBTB: PUSH P,G
HRRZ G,1(G)
ADD G,[1(T)]
MAKBB3: MOVSI T,-4
MOVE TT,@G
XCT @-1(P)
AOBJN T,.-2
POP P,G
JRST POPJ1
BITTAB: FOR I←43,0,-1{1⊗I↔}
;MAKBNB, MAKBBT, MAKBB2, MBDSP, MBIND, MBIND2
MAKBNB: PUSH P,G
HRRZ G,1(G)
ADD G,[1(T)]
MOVSI T,-4
SETCM TT,@G
AND TT,FABITS+1(T)
XCT @-1(P)
AOBJN T,.-3
POP P,G
JRST POPJ1
MAKBBT: FOR I←0,3{SETZM MBBUF+I↔}
PUSH P,H
MOVE H,G
HRRZ G,(G)
MAKBB2: PUSHJ P,MAKBT0
IORM TT,MBBUF(T)
HLRZ G,(G)
CAIE G,(H)
JRST MAKBB2
EXCH H,(P)
MOVE G,[,MBBUF(T)]
JRST MAKBB3
MBDSP: MOVEI TT,
JRST MAKBTB
JRST MAKBTN
JRST MAKBNB
JRST POPJ1
JRST MBIND
JSP SBARF
JSP SBARF
MBIND: PUSH P,G
HRRZ G,1(G)
MOVSI T,(<XCT @>)
HRRI T,-1(P)
PUSH P,T
HRRI T,(P)
PUSH P,[JRST MBIND2]
PUSH P,T
JRST MAKBT0
MBIND2: SUB P,[2,,2]
POP P,G
JRST POPJ1
;SCGEN
SCGEN: HRRZ C,VBBITS
JUMPE C,.+2
PUSHJ P,SBTMAK
SKIPE B,SSVMAX
PUSHJ P,SFSGET
SUBI A,1
HRRM A,SSVINS
MOVEI B,440
PUSHJ P,SFSGET
HRLI A,(<XCT (C)>)
MOVEM A,SCXCT#
MOVE T,SRCNT
MOVEM T,SRCN1#
PUSHJ P,ENDSET
MOVEI T,1(A)
MOVEM T,SCODPT#
MOVSI T,(<JSP D,>)
HLLM T,SBKINS
MOVE B,SGPNT
TRNN F,SDELIM
TDZA E,E
MOVNI E,1
PUSHJ P,SCGEN1
MOVSI T,LOKBIT
MOVEI A,2(A)
FSFIX A,T
SUBI A,1
EXCH A,SFSLST
HRLM A,@SFSLST
JRST ENDFIX
;SCGEN1, SCGEN2, SCGEN3, SCGEN4, SCGEN5, SCGEN6
SCGEN1: MOVEI C,
SCGEN2: SKIPGE 1(B)
JSP SARRGH
HLRZ D,(B)
MOVEI T,1(A)
HRLM T,(B)
LEG PUSH A,D
TRNN F,SBKWDS
JRST SCGEN3
LEG PUSH A,[LSHC B,-7]
LEG PUSH A,[ROT C,7]
SCGEN3: LDB G,[330400,,1(B)]
CAIL G,4
JSP SARRGH
HRRZ H,1(B)
JUMPE H,SCGFA
LDB T,[330400,,1(D)]
CAIL T,4
ADDI G,4
PUSHJ P,SCGTST
HLL D,1(B)
CAIL G,4
AOBJP A,SCGEN5
PUSHJ P,SCGBK1
CAIN G,2
JRST SCGNC
SCGEN4: LDB T,[221100,,1(B)]
JUMPE T,.+3
ADD T,SSVINS
LEG PUSH A,T
MOVE T,1(B)
TLNE T,SGEBIT
JRST SCGE
HLL C,(B)
EXCH C,(B)
EXCH C,B
MOVSI T,1000
HLLM T,SBKINS
AOJA E,SCGEN2
SCGEN5: PUSH P,A
PUSHJ P,SCGHB
MOVEI T,(A)
ADD T,SBKINS
POP P,TT
MOVEM T,(TT)
JRST SCGEN4
;SCGTST, SCGT2, SCGT3, SCGDSP, SCGCN, SCGCN2, SCGBTN, SCGBT
SCGTST: XCT SCGDSP(G)
TDNN T,SLMODE
JRST SCGT2
HRLI H,(<CAIN C,>)
LEG PUSH A,H
MOVSI T,(<JRST>)
HRRI T,3+1(A)
LEG PUSH A,T
TDCA H,[<CAIE>≠<CAIN 40>]
SCGT2: HRLI H,(<CAIE C,>)
SCGT3:
LEG PUSH A,H
POPJ P,
SCGDSP: MOVE T,CTAB(H)
JRST SCGBT
JRST SCGCN
JRST SCGBTN
JRST SCGCN
JRST SCGBTN
MOVE T,CTAB(H)
JRST SCGBT
SCGCN: MOVE T,CTAB(H)
TDNN T,SLMODE
JRST SCGCN2
HRLI H,(<CAIE C,>)
LEG PUSH A,H
TDCA H,[<CAIE>≠<CAIN 40>]
SCGCN2: HRLI H,(<CAIN C,>)
JRST SCGT3
SCGBTN: SKIPA T,[TDNE (C)]
SCGBT: MOVSI T,(<TDNN (C)>)
MOVS TT,5(H)
HLR T,TT
TRZE TT,400000
TLC T,(<TDNN>≠<TDNE>)
CAMG TT,[CTAB,,-1]
TRNE G,2
TDZA H,H
MOVSI H,NSPEC
IOR H,BEG(TT)
TRNN H,-1
TROA H,(<MOVSI>)
TLOA H,(<MOVEI>)
MOVS H,H
LEG PUSH A,H
LEG PUSH A,T
POPJ P,
;SCGE, SCGE2, SCGEL, SCGBAK, SCGBK1, SCGBK2, SCGBK3, SCGFA, SCGNC, SCGNFA
SCGE: MOVSI T,(<MOVEI>)
HRRI T,(E)
LEG PUSH A,T
LEG PUSH A,[SOSG SRCN1]
LEG PUSH A,[JSP D,SRCHX]
HRRZ D,(B)
LDB G,[330400,,1(D)]
PUSHJ P,SCGBAK
SCGE2: MOVE D,SCXCT
HLRZ G,(B)
MOVE T,(G)
HRLM T,(B)
MOVEM D,(G)
JUMPE C,CPOPJ
SCGEL: EXCH C,B
HLRZ G,(B)
HRL C,(G)
MOVEM D,(G)
EXCH C,(B)
TRNE C,-1
JRST SCGEL
POPJ P,
SCGBAK: CAIL G,4
JRST SCGHB
SCGBK1: HLRZ T,(D)
ADD T,SBKINS
SCGBK2: TLNN D,NLDBIT
SOJA T,.+3
SCGBK3: TRNE F,SBKWDS
ADDI T,2
LEG PUSH A,T
POPJ P,
SCGFA: CAIGE G,2
JRST SCGNFA
SCGNC: MOVSI T,37740
HRRI T,2(A)
LEG PUSH A,T
JRST SCGEN4
SCGNFA:
LEG PUSH A,[JRST SRCHLX]
JRST SCGE2
;SCGHB, SCGHB0, SCGHB5, SCGHB1, SCGHB2, SCGHB3, SCGHB4, SCGHBX, SCGHX2
SCGHB: MOVEI T,(A)
LEG PUSH A,[MOVEM C,SBTST]
SCGHB0: HRLM T,(P)
LDB G,[330400,,1(D)]
CAIE G,XFRSAV
JRST SCGCB
SCGHB5: SUBI T,-774(A)
ROT T,-15
HRRI T,1+2(A)
LEG PUSH A,[MOVE C,SBTST]
LEG PUSH A,T
SCGHB1: HRRZ H,1(D)
LDB T,[221100,,1(H)]
JUMPN T,SCGHB3
MOVSI T,(<MOVEI C,>)
HRR T,1(H)
SCGHB2:
LEG PUSH A,T
LDB T,[221100,,1(D)]
ADD T,SSVINS
LEG PUSH A,T
HLL D,1(D)
HRR D,(D)
LDB G,[330400,,1(D)]
CAIGE G,4
JRST SCGHBX
CAIE G,XFRSAV
JSP SARRGH
JRST SCGHB1
SCGHB3: HRLI T,(<MOVE C,>)
ADDI T,@SSVINS
JRST SCGHB2
SCGHB4: CAIL G,4
JRST SCGHB5
SCGHBX: HLRZ T,(P)
SCGHX2: SUBI T,-774(A)
ROT T,-15
HLR T,(D)
LEG PUSH A,[MOVE C,SBTST]
AOJA T,SCGBK2
;SCGCB, SCGCB0, SCGCB1, SCGCB2, SCGCB3, SCGCB4, SCGCB5, SCGHCB
SCGCB: PUSH P,C
SCGCB0: MOVEI C,
SCGCB1: HRRZ H,1(D)
JUMPE H,[HLL D,1(D)↔HLR D,(D)↔JRST SCGCB3]
LDB T,[221100,,1(D)]
HRLI T,(<MOVE C,>)
ADDI T,@SSVINS
LEG PUSH A,T
TRZE G,REMTST
JRST SCGCB2
CAIE G,INDTST
JSP SARRGH
LDB G,[330400,,1(H)]
HRRZ H,1(H)
SCGCB2: CAIL G,4
JSP SARRGH
PUSHJ P,SCGTST
LEG PUSH A,C
MOVEI C,(A)
SCGCNO: HLRZ T,(D)
HLL T,1(D)
HRRZ D,(D)
SCGCB3: LDB G,[330400,,1(D)]
CAIL G,INDTST
JRST SCGCB1
PUSH P,T
CAIL G,4
JRST SCGHCB
HLRZ T,-2(P)
PUSHJ P,SCGHX2
SCGCB4: MOVSI H,(<JRST>)
TROA H,1(A)
SCGCB5: MOVEI C,(T)
MOVE T,(C)
MOVEM H,(C)
JUMPN T,SCGCB5
POP P,D
LDB G,[330400,,1(D)]
CAIL G,INDTST
JRST SCGCB0
POP P,C
HLRZ T,(P)
JRST SCGHB4
SCGHCB: HLRZ T,-2(P)
PUSHJ P,SCGHB0
JRST SCGCB4
;SBTMAK, SBTMK1, SBTMK2, SBTMK3, SBTMK4, SCGENB, SCGHB, SSVINS, SCXCT, SBKNW, SBKNWA, SBKDSP
SBTMAK: MOVEI B,200
PUSHJ P,SFSGET
MOVSI T,(A)
HRRI T,1(A)
SETZM (A)
BLT T,177(A)
MOVEI B,43
SBTMK1: HRLI A,BITTAB-BEG(B)
MOVEM A,5(C)
MOVE D,BITTAB(B)
HRLI C,-4
MOVSI G,TT
HRRI G,(A)
SBTMK2: SKIPE T,1(C)
JFFO T,SBTMK4
SBTMK3: ADDI G,40
AOBJN C,SBTMK2
HRRZ C,-4(C)
JUMPE C,CPOPJ
SOJGE B,SBTMK1
JRST SBTMAK
SBTMK4: IORM D,@G
ANDCM T,BITTAB(TT)
JFFO T,SBTMK4
JRST SBTMK3
IMPURE
SSVINS: MOVEM C,...
SBKINS: JSP D,1
SBKNW: SOJL A,...
SBKNWA: MOVE B,...(A)
SBKNWR: LSH B,-1
SBKNWX: JSP @
SBKDSP: REPEAT 4,<ADDI 3↔ROT C,7↔JSP @>
SBKNLX←.-1
JSP SBKNW
PURE
;SRCPAG, SRCPG1
SRCPAG: MOVEI T,SRCHLX
SRCPG1: MOVEM T,SRCHLA#
MOVEI T,SBKNL
MOVE D,[SRCPGB,,SRCPGF]
PUSHJ P,SRCSET
MOVE T,ARRL
MOVEM T,SRCL#
MOVE A,ARRLIN
HRRZ T,2(A)
CAME T,SRCNUM
SETZM SRCOFF#
TRNE F,SBKWDS
JRST NOSRC2
MOVEM A,SRCLIN#
MOVE E,SRCOFF
TRNE F,SDELIM
SUBI E,1
PUSHJ P,GBYTP
SKIPA C,[15]
ILDB C,A
MOVEI D,3
PUSHJ P,SCALL
POPJ P,
AOS (P)
JRST SCNBAK
SPFIN: MOVEI T,SPFX
MOVEM T,SRCHLA
SPFL: XCT SCXCT
LSHC B,-7
ROT C,7
CAIE C,15
AOJA E,SPFL
MOVE G
SPFL2: HRRZ T,@SRCLIN
MOVEM T,SRCLIN
AOS SRCL
SKIPGE 1(T)
JRST SPFL2
SPFX: MOVEM E,SRCOFF#
MOVE T,SRCLIN
HRRZ T,2(T)
MOVEM T,SRCNUM#
POPJ P,
NOSRC2: SORRY REVERSE SEARCHES NOT IMPLEMENTED
JRST SBARF2
;GBYTP, GBYTPL, GBTPX, GBPDSP, GBPTAB
GBYTP: CAIE A,BOTSTR
SKIPGE T,1(A)
POPJ P,
ADD A,[10700,,LLDESC-1]
TRNN T,777
ADD A,[340000,,1]
JUMPE E,POPJ1
JUMPL E,GBPNEG
MOVSI T,LSPC
MOVEI DSP,GBPDSP-2
GBYTPL: GETCH2 T,A
GBPTX: SOJG E,GBYTPL
JRST POPJ1
GBPNEG: MOVEI C,40
JRST POPJ2
GBPDSP: POPJ P,
JRST 4,.
JRST GBPTAB
JRST 4,.
GBPTAB: ILDB C,A
CAIE C,11
JRST GBPTAB
JRST GBPTX
BTAB3: 10700,,-10
100700,,-17
170700,,-26
260700,,-35
350700,,
;SRCPGF, SPFTAB, SPFCR, SPFLUZ
SRCPGF: 15↔JSP SPFCR
11↔JSP SPFTAB
177↔JSP SARRGH
0↔JSP SARRGH
SPFTAB: ILDB C,A
CAIE C,11
JRST .-2
ILDB C,A
JRST @
SPFCR: HRRZ A,@SRCLIN
CAIN A,BOTSTR
JRST @SRCHLA
MOVEM A,SRCLIN
AOS SRCL
SKIPGE B,1(A)
JRST SPFCR
TRNN B,777
TLOA A,350700
HRLI A,440700
ADDI A,LLDESC
ILDB C,A
JRST @
;SRCPGB, SPFTAB, SBKNL, SBKNUL
SRCPGB: 11↔JSP D,SPBTAB
0↔JSP SARRGH
SPBTAB: XCT @
LSHC B,-7
ROT C,7
CAIE C,11
JRST SPBTAB
MOVEI C,177
JRST -1(D)
SBKNL: HLRZ B,@SRCLIN
CAIN B,PAGE
JRST @SRCHLA
MOVEM B,SRCLIN
SOS SRCL
SKIPGE A,1(B)
JRST SBKNL
TRNN A,777
JRST SBKNUL
MOVEI A,LLDESC(B)
HRRM A,SBKNWA
HRRZ A,-LLDESC-1(A)
SUBI A,LLDESC+2+1
XCT SBKNWA
LSH B,-1
LSHC B,-7
JUMPN C,[ROT C,7↔SOJA SBKNWX]
SUBI 1
FOR I←0,3<LSHC B,-7↔JUMPN C,SBKDSP+1+3*I
> JSP SARRGH
SBKNUL: MOVEI C,15
MOVEI A,
ADDI 2
JRST SBKNLX
;SRCSET, SRCST1, SRCSTL, SRCST2
SRCSET: HRRM T,SBKNW
MOVEM D,SRCTYP#
SRCST1: MOVE A,SCXCT
TRNE F,SBKWDS
SKIPA T,[XCT @]
SKIPA T,[ILDB C,A]
MOVS D,D
MOVEM T,1(A)
MOVSI T,1(A)
HRRI T,2(A)
BLT T,177(A)
MOVE T,[JRST @40]
MOVEM T,200(A)
MOVSI T,200(A)
HRRI T,201(A)
BLT T,377(A)
SRCSTL: MOVE C,(D)
CAIGE C,200
JRST SRCST2
MOVE T,[JSP D,SOOPS]
MOVEM T,@A
SUBI C,200
SRCST2: MOVE T,1(D)
MOVEM T,@A
ADDI D,2
JUMPN C,SRCSTL
POPJ P,
;SCALL, SRCHX, SRCHLX
SCALL: MOVE T,SCXCT
ADDI T,200
MOVEM T,41
MOVEM SBTST
HRRZ SCXCT
ADDI SSPACS+1
MOVEM 1,@
HRLI 2
AOS 1,
BLT 16(1)
MOVE SBTST
MOVEM -2(1)
MOVE 1,-1(1)
ADD D,SCODPT
JRST @SCODPT
SRCHX: HRRZ 17,SCXCT
MOVE 16,SSPACS+P(17)
AOSA (16)
SRCHLX: HRRZ 17,SCXCT
MOVEM SSPACS+E(17)
MOVE SSPACS(17)
MOVSI 17,SSPACS+D(17)
HRRI 17,D
BLT 17,17
MOVE T,[PUSHJ P,UUOH]
MOVEM T,41
POPJ P,
;SCNBAK, SCNBKL
SCNBAK: PUSH P,A
PUSH P,D
MOVE D,SRCTYP
TRC F,SBKWDS
PUSHJ P,SRCST1
POP P,D
POP P,A
TRCN F,SBKWDS
JSP SARRGH
LDB C,A
CAIN C,11
MOVEI C,40
MOVE B,(A)
TRNN F,OFFPAG
SKIPA T,SRCLIN
SKIPA T,[IBUF]
ADDI T,LLDESC
SUBI A,(T)
HRRM T,SBKNWA
LDB D,[370300,,A]
ANDI A,-1
MOVE D,BTAB(D)
LSH B,@BTAB3(D)
IMULI D,3
MOVE G,
MOVEI SBKDSP(D)
MOVEI D,SCNBKL+5
MOVE T,SCXCT
MOVEM T,SCNBKL
MOVSI H,NSPEC!LSPC
MOVEI DSP,SCBDSP
JUMPN E,SCNBKL
POPJ P,
IMPURE
SCNBKL: XCT ...(C)
LSHC B,-7
ROT C,7
TDNE H,CTAB(C)
XCT @CTAB(C)
SOJG E,SCNBKL
POPJ P,
PURE
SCBDSP: JRST SCNBKL
JSP SARRGH
JFCL
JRST SCNBKL
JFCL
JRST SCNBKL
JFCL
;SCONTF, SRCFNP, SRCFNB, SFNB2, SFRETR
SCONTF: MOVE D,
ADDI D,2
JSP A,SGTACS
PUSH P,T
PUSH P,D
MOVEI T,SBKNB
MOVE D,[SRCFB,,SRCFF]
PUSHJ P,SRCSET
POP P,D
POP P,T
TRO F,OFFPAG
MOVE A,DIRPT
MOVEM A,SDIRPT#
MOVE A,CURPAG
MOVEM A,SRCPG#
JSP A,SRTACS
SRCFNP: HRRZ A,@SDIRPT
CAIN A,DIREND
JRST SRCHLX
MOVEM A,SDIRPT
AOS SRCPG
SKIPN A,1(A)
JRST SIOERR
MOVEI C,-1(A)
CAME C,IBLK
XCT %SETI
MOVEM C,IBLK
ANDCMI A,-1
ROT A,7
ADD A,IBFPNT
IBP A
JRST SFNB2
SRCFNB: HRRZ A,@SDIRPT
HRRZ A,1(A)
SUBI A,1
CAMG A,IBLK
JRST SRCFNP
MOVE A,IBFPNT
SFNB2: XCT %IN
AOSA IBLK
JRST SIOERR
SFRETR: HLRZ C,-3(D)
CAIE C,(<XCT (C)>)
SOJA D,SFRETR
MOVEI C,40
JRST -3(D)
;SRCFF, SFFNUL, SGTACS, SRTACS
SRCFF: 377↔JRST SRCFNB
212↔JRST SFRETR
200↔JRST SFFNUL
SFFNUL: SKIPE (A)
JRST SFRETR
SKIPN 1(A)
AOJA A,.-1
HRLI A,700
JRST SFRETR
SSPACS←←400
SSSACS←←420
SGTACS: EXCH A,SCXCT
MOVE F,SSPACS+F(A)
MOVEM P,SSSACS+P(A)
MOVE P,SSPACS+P(A)
EXCH A,SCXCT
JRST (A)
SRTACS: EXCH A,SCXCT
MOVEM F,SSPACS+F(A)
MOVE P,SSSACS+P(A)
EXCH A,SCXCT
JRST (A)
SOOPS: HLL D,40
TLNN D,¬1000
XCT SCXCT
LSH C,22-15
HLL C,D
ROT C,15
ADDI D,-774(C)
HLRZ C,C
XCT SCXCT
;SRCFB, SFBNUL, SBKNB, SBKNB2, SIOERR, SBKNP
SRCFB: 14↔JRST SFBNUL
12↔JRST SFBNUL
0↔JRST SFBNUL
SFBNUL: HLRZ C,-5(D)
CAIE C,(<XCT (C)>)
SOJA D,SFBNUL
MOVEI C,177
JUMPN B,-5(D)
MOVEI -5(D)
SOJL A,SBKNB
SKIPN B,@SBKNWA
SOJGE A,.-1
JUMPGE A,SBKNWR
SBKNB: MOVE A,SDIRPT
HRRZ A,1(A)
CAML A,IBLK
JRST SBKNP
SBKNB2: SOS A,IBLK
XCT %SETI
MOVEI A,177
XCT %IN
JRST SBKNWA
SIOERR: OUTSTR [ASCIZ \SEARCH I/O ERROR.
\]
JRST SRCHLX
SBKNP: JSP SBARF
;JFILL, JUST, JUSTL1, JUSTL2, JDISP
JFILL: TROA F,NEG
JUST: TRZ F,NEG
TRNE F,ATTMOD
SKIPA E,[JATAB]
MOVEI E,JPTAB
TRNN F,ARG
TROA A,-1
SKIPA D,@JPT1(E)
MOVE D,@JPT2(E)
JUMPLE A,CPOPJ
MOVEM A,JCNT#
HRRZM D,JPTR#
PUSHJ P,REMPTR
HLRZ A,(D)
HRLZM A,JLPT#
MOVSI T,JPTR
HLLM T,(D)
MOVEI T,JLPT
HRRM T,(A)
MOVE D,[440700,,BUF]
MOVEM D,JWPT#
SETZB B,JWCOL#
SETZM JBUGR#
PUSHJ P,JSET
SETOM BUF2
MOVE T,[BUF2,,BUF2+1]
BLT T,BUF2+37
PUSHJ P,NXTLN2
JRST JFIX
JFCL
JUSTL1: GETCH2 H,A
CAIN C,40
JRST JUSTSP
CAIN C,11
JRST JUSTTB
JUMPGE B,JUSTL3
JUSTL2: IDPB C,D
AOBJN B,JUSTL1
JRST JUSTL1
JUSTL3: IDPB C,D
SKIPL JWPT
PUSHJ P,JDUMP
JRST JUSTL1
JDISP: PUSHJ P,JUSTCR
JRST 4,.
JSP T,JTAB
JRST 4,.
;JUSTTB, JUSTSP, JUSTS2, JUSTSL, JUSTS3, JUSTSO, JSTSO2
JUSTTB: MOVEI C,40
JUSTSP: HRRZM B,JWCOL
MOVEM D,JWPT
LDB T,D
CAIL T,"!"
CAILE T,"?"
JRST JUSTS2
MOVE T,BITTAB-40(T)
TDNN T,[200050000020] ; !,.?
JRST JUSTS2
AOS JSCNT
IDPB C,D
AOBJP B,.+1
GETCH2 H,A
CAIN C,40
JRST JUSTS2
CAIE C,11
JRST JUSTS3
JUSTS2: AOS JSCNT
IDPB C,D
AOBJP B,.+1
JUSTSL: GETCH2 H,A
CAIE C,40
CAIN C,11
JRST JUSTSL
JUSTS3: JUMPL B,JUSTL2
IDPB C,D
PUSHJ P,JDUMP
JRST JUSTL1
;JUSTCR, JCRTB, JCR2, JFIX, JPTAB, JATAB
JUSTCR: PUSHJ P,NXTLIN
JRST JCR2
JRST JCRTB
MOVEI C,40
POPJ P,
JCRTB: POP P,T
JRST -3(T)
JCR2: SUB P,[1,,1]
PUSHJ P,JFLUSH
PUSHJ P,JFIX
JRST JEXIT(E)
JFIX: HLRZ T,JLPT
MOVE TT,JPTR
HRRM TT,(T)
HRLM T,(TT)
JRST FIXPTR
JPT1←←0
JPT2←←1
JETST←←2
JLPTR←←3
JCPTR←←4
JEXIT←←5
JPTAB: ARRLIN
,PAGE ;STUPID FAIL
BOTSTR
LINES
CHARS
PUSHJ P,LINSET
JRST SETWRT
JATAB: ATTBUF
ATTBUF
ATTBUF
ATTNUM
ATTSIZ
MOVE T,ATTNUM
CAILE T,ATTMAX
MOVEI T,ATTMAX
PUSHJ P,EXSET
JRST ATTWRT
IMPURE
LMAR: 1
PMAR: 1
RMAR: =69
PURE
;NXTLIN, NXTLN2, JTAB, NXTBL
NXTLIN: MOVE A,JPTR
LDB T,[111100,,1(A)]
MOVNI T,(T)
ADDM T,@JCPTR(E)
SOS @JLPTR(E)
HRRZ C,(A)
MOVEM C,JPTR
MOVSI T,JPTR
HLLM T,(C)
PUSHJ P,FSGIVE
NXTLN2: MOVE A,JPTR
SOSL JCNT
CAIN A,@JETST(E)
POPJ P,
SKIPL T,1(A)
TRNN T,777
JRST NXTBL
AOS (P)
ADD A,[440700,,LLDESC]
MOVE T,A
ILDB T,T
CAIN T,"."↔JRST JCMLIN
CAIE T,11
JRST [TLZN F,TF1↔AOS (P)↔POPJ P,]
PUSHJ P,JFLUSH
ILDB C,A
IDPB C,D
ADD B,[10,,10]
POP P,T
TLZ F,TF1
JTAB: ILDB C,A
CAIE C,11
JRST JTAB
JRST (T)
NXTBL: PUSHJ P,JFLUSH
HRRZ C,(A)
MOVEM C,JPTR
MOVSI T,JPTR
HLLM T,(C)
MOVSI T,JLPT
HLR T,JLPT
MOVSM T,(A)
HRRM A,(T)
HRLZM A,JLPT
HRLI B,(B)
MOVN T,PMAR
PUSHJ P,JSET2
TLO F,TF1
JRST NXTLN2
;JDUMP, JDMP2, JDLT, JDL1, JDISP2
JDUMP: MOVEI T,
IDPB T,D
TRNN F,NEG
SKIPN TT,JSCNT
JRST JDMP2
MOVE T,JWPT
ILDB C,T
CAIN C,40
SOJA TT,.-2
MOVEM TT,JSCNT
MOVE T,JBUGR#
ADDI T,3
ANDI T,7
MOVEM T,JBUGR
MOVE T,JSIZE
SUB T,JWCOL
JUMPG T,.+2
TDZA T,T
LSH T,3
JDMP2: MOVEM T,JSINC#
PUSH P,A
MOVE D,JWPT
ILDB T,D
PUSH P,T
MOVEI T,
DPB T,D
SETZM JSIZE
SETZM JWPT
SETZB B,G
MOVSI H,LSPC!NSPEC
MOVEI DSP,JDISP2
MOVE D,[440700,,BUF]
SKIPA A,[440700,,BUF2]
JDLT: JSP TT,JDTAB
JDL1: GETCH2 H,D
CAIN C,40
JRST JDSP1
IDPB C,A
AOJA B,JDL1
JDISP2: JRST JDFIN
JRST 4,.
JRST 4,.
JRST 4,.
JRST JDLT
JRST 4,.
;JDSP1, JDSP2, JDSP3, JDTAB, JFLUSH
JDSP1: MOVE T,JSINC
ADDB T,JSIZE
IDIV T,JSCNT
ADD T,JBUGR
LSH T,-3
SUB T,JWPT
ADDM T,JWPT
ADDI T,1(B)
JRST JDSP2A; MOVEI TT,1(B)
TRNE TT,7
JRST JDSP2
IDPB C,A
ADDI B,1
JDSP2: MOVEI TT,(T)
ANDCMI TT,7
CAILE TT,(B)
JRST JDSP3
JDSP2A: SUBM B,T
JUMPE T,JDL1
HRLI B,(T)
IDPB C,A
AOBJN B,.-1
JRST JDL1
JDSP3: PUSH P,T
MOVEI C,11
JSP TT,JDTAB
MOVEI C,40
POP P,T
JRST JDSP2
JDTAB: IDPB C,A
ADDI G,(B)
HRLI B,(B)
TLO B,-10
MOVEI T,40
IDPB T,A
AOBJN B,.-1
SUBI G,-1(B)
IDPB C,A
JRST (TT)
JFLUSH: JUMPL D,CPOPJ
MOVEM D,JWPT
SETZB T,TT
IDPB T,D
JRST JDMP2
;JDFIN
JDFIN: MOVEI C,15
IDPB C,A
MOVEI C,12
IDPB C,A
TDZA C,C
IDPB C,A
TLNE A,760000
JRST .-2
AOS @JLPTR(E)
ADDI G,2(B)
ADDM G,@JCPTR(E)
LSH G,11
IORI G,(B)
MOVEI B,-BUF2+1+LLDESC(A)
PUSHJ P,FSGET
MOVSI TT,BUF2
HRRI TT,LLDESC(A)
BLT TT,-2(T)
MOVSI T,TXTCOD
HLLM T,-1(A)
HRRZM G,1(A)
AOS T,TXTNUM
MOVEM T,2(A)
HLRZ T,JLPT
CAIE T,PAGE
SKIPGE 1(T)
TRO F,UPDTXT
HRLI T,JLPT
MOVSM T,(A)
HRRM A,(T)
HRLZM A,JLPT
MOVE A,D
MOVE D,[440700,,BUF]
MOVEM D,JWPT
SETZM JWCOL
POP P,C
TDZA B,B
ILDB C,A
CAIN C,40
JRST .-2
JUMPE C,JDFIN2
IDPB C,D
ILDB C,A
AOBJP B,.-3
;JDFIN2, JSET, JSET2
JDFIN2: POP P,A
JSET: MOVN T,LMAR
JSET2: ADD T,RMAR
ADDI T,1
MOVEM T,JSIZE#
MOVSI T,(T)
SUB B,T
SETZM JSCNT#
MOVSI H,LSPC
MOVEI DSP,JDISP-2
POPJ P,
JCMLIN: PUSHJ P,JFLUSH
TLZ F,TF1
POPJ P,
;MACRO FREE STORAGE - MFSCLR,GETMFS,FREMFS
SMFS←300 ;Size in blocks of macro free storage.
MFSBS←←6 ;Size of blocks in macro free stg.
ARRAY MACFS[smfs*mfsbs] ;Free storage space for macros.
MFSCLR: MOVEI B,SMFS ;CONS up a macro free stg. list.
MOVEI C,MACFS+MFSBS-1
MOVEM C,MFSPNT# ;Ptrs. are to last word of block...
MFSCL1: ADDI C,MFSBS
MOVEM C,-MFSBS(C)
SOJG B,MFSCL1
MOVEI B,[0]
MOVEM B, -MFSBS(C) ;List ends with ptr. to 0.
POPJ P,
GETMFS: SKIPN A,@MFSPNT ;Get a block of macro free stg.
HALT ;None.
EXCH A,MFSPNT
PUSH P,A ;This is a ptr. to last word of block.
SUBI A,MFSBS-2 ;Set all words of block to -1.
HRLI A,-1(A)
SETOM -1(A)
BLT A,@(P)
POP P,A
SETZM (A) ;Make last word 0.
SUBI A,MFSBS-1 ;Get ptr. to first word.
POPJ P,
FREMFS: ADDI A,MFSBS-1 ;Return a block to the free list. (A should pt. to 1st wd.)
EXCH A,MFSPNT
MOVEM A,@MFSPNT
POPJ P,
;MACRO DEFINER INPUT WATCHERS - INCHWL,INCHSL,SNEAKW,INCHRS,etc.: MACTYI
MACTYI: MOVEM A,MACTMP#
SKIPE MXCTPT#
JRST MTYIX
MTYIDO: POP P,A
AOS (P)
XCT 40
SOS (P)
MTYIX2: PUSH P,A
MOVE A,@MACTMP
CAIN A,MESCPC
JFCL MESCP
SKIPN MDEFPT# ;Are we defining a macro ?
JRST POPAJ
DPB A,MDEFPT
ILDB A,MDEFPT
JUMPN A,POPAJ
PUSHJ P,GETMFS
HRRM A,@MDEFPT
TLO A,331100
MOVEM A,MDEFPT
JRST POPAJ
MTYIX: ILDB A,MXCTPT
JUMPN A,MTYIX1
ILDB A,MXCTPT
JUMPN A,@MTXDSP(A)
HRRZ A,@MXCTPT
TLO A,331100
MOVEM A,MXCTPT
JRST MTYIX
MTYIX1: EXCH A,(P)
POP P,@MACTMP
JRST MTYIX2
;PDL, PATCH, PAT, ZVARS, LEGTAB
IMPURE
PDL: BLOCK LPDL
EPDL←←.-1 EPDL2←←.-2
PATCH:
PAT: BLOCK 100
TYIPNT: 0
TCPNT: 0
SYSCMD: 0
ZVARS: 0
VAR
DIR: BLOCK LPDESC
FNDTBF: BLOCK SRCBUF+SRSIZ
FNDBUF: BLOCK SRCBUF+SRSIZ
SRDUMY: BLOCK SRCBUF
BITBF1: BLOCK 4
BITBF2: BLOCK 4
SBBUF: BLOCK 4
MBBUF: BLOCK 4
VBBITS: BLOCK 6
SBLST: BLOCK 2
BUF: BLOCK 40
BUF2: BLOCK 40
TCBUF←←BUF2
RBUF: BLOCK 40
RSPNT←←RBUF
EVARS←←.-1
PURE
LEGTAB: FOR @! X←0,LEGNUM-1{LEG!X
}LEGCNT←←LEGNUM
XLIST ;THE LITERALS ARE XLISTED FOR YOUR READING PLEASURE
LIT ;DO THESE LAST FOR OPTIMIZATION
LIST
ENDPUR←←.
IMPURE
IFE PURESW,{PURLST←←PURLNK}
ENDLOC←←.
END BEG